展开

关键词

23种设计(Java

23种设计 1、代码: package com.design.partterns; /** * 23种设计 */ class Train implements Car{ public void run() { System.out.println("火车正在发动..."); } } /* * 类 客车 */ class Bus implements Car{ public void run() { System.out.println("客车正在发动..."); } } /* * 类 3、总结: 属于创建型,设计思路是定义一个接口表示一个类型,再定义多个属于该类型的接口中的方法。 最后再写一个类,定义一个接口返回类型的方法,参数为类的名字,根据不同的名字调用相应的类拟生产相应的产品。

13030

go设计(二):简易

简易主要是用来解决对象“创建”的问题。以下的例子取自《大话设计》中第一章,一个可扩展的“计算器”。当增加新的功能时,并不需改动原来已经的算法。 ,来例化这两个类, 在这个简易,我们只传入相应的运算方,如“+”,“-”,用来创建相关的运算策略。 ,我们的简易好了,当我们需要添加乘法运算,我们不必再修改或者编译已经完成的加法和减法运算。 因为go中不允许存在抽象类,这使得我了一个非常诡异的函数SetData(data …interface{})。它可以传入多个任意对象,用来设置我们结构中需要的数据。 这只是一个示例,具体简易有什么其它作用,可以参考《重构与》中第6章:创建 的相关知识。讲的非常的全面。

21110
  • 广告
    关闭

    什么是世界上最好的编程语言?丨云托管征文活动

    代金券、腾讯视频VIP、QQ音乐VIP、QB、公仔等奖励等你来拿!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    适配器、单例及其Go

    适配器是一种结构型,我们读源码过程中接触到的Adapter、Wrapper基本都是适配器。 适配器分为两类:类适配器(采用多继承方)和对象适配器(采用组合方)。 定义一个创建对象的接口,让其子类自己决定例化哪一个类,使其创建过程延迟到子类进行。 属于创建型的初衷就是为了在创建对象时不会对调用方暴露创建逻辑。 分为简单方法和抽象是一种从简单到抽象的过程。 ").Name()) fmt.Println("小明领取了一张%s", e.GetBook("英试卷").Name()) } (3)简单和抽象的区别 简单:直接提供对象,创建产品例 抽象:提供一系列创建产品例的接口定义,具体怎么创建由子

    48700

    (创建 上)设计——、抽象 C++Python3

    简介 设计是为了解决一些出的问题设计的解决方案。是长时间经验的总结,是根据不同问题从而提出并且践出来的解决办法。使用不同的设计可以解决不同的问题。 创建型顾名思义是处理对象创建的设计,降低复杂度,创建复杂对象时使用。 在类中一个接口创建指定对象,使一个类的例化延迟到了子类。 ,每次新建类,只需要知道类的特定标号,或者说特定的名称即可,不需要关心类的逻辑,在一定程度上减少了代码冗余,减少了重复做功;但是,也暴露了一个问题:每次要新增一个类,都需要在类中去逻辑,也增强了之间的耦合度 抽象 单独的一个去创建所有类型的类会显得这个臃肿不堪,那么创建多个不就ok了?每个都做一种类别的事情。 再定3个,分别用来处理不同的食物,这样就不用担心所有的类都放一个进行处理了,最后再定义一个抽象类,这个类对所有的进行一个统一封装,这样就了抽象类。

    25010

    (创建 上)设计——、抽象 C++Python3

    简介 设计是为了解决一些出的问题设计的解决方案。是长时间经验的总结,是根据不同问题从而提出并且践出来的解决办法。使用不同的设计可以解决不同的问题。 创建型顾名思义是处理对象创建的设计,降低复杂度,创建复杂对象时使用。 在类中一个接口创建指定对象,使一个类的例化延迟到了子类。 ,每次新建类,只需要知道类的特定标号,或者说特定的名称即可,不需要关心类的逻辑,在一定程度上减少了代码冗余,减少了重复做功;但是,也暴露了一个问题:每次要新增一个类,都需要在类中去逻辑,也增强了之间的耦合度 抽象 单独的一个去创建所有类型的类会显得这个臃肿不堪,那么创建多个不就ok了?每个都做一种类别的事情。 再定3个,分别用来处理不同的食物,这样就不用担心所有的类都放一个进行处理了,最后再定义一个抽象类,这个类对所有的进行一个统一封装,这样就了抽象类。

    12220

    C++

    本文链接:https://blog.csdn.net/chaipp0607/article/details/100107319 分为3种,即简单方法、抽象C++的主要利用到虚函数 产品类需要有一个基类,基类中的具体产品需要是个纯虚函数,这样一来,产品的子类必须要重写具体的产品不同的功能。 产品类封装完成后,还需要一个类,类对产品类再次封装,最终由一个对象决定创建出哪一种产品类的例。 但是简单违背开放-封闭原则,即对扩展开放,对修改封闭。因为要添加第三个产品“减”时,需要修改类的代码。 方法 由于简单的弊端,发展出了方法。 抽象是简单方法的组合。

    21920

    Objective-C (上) -- 简单

    简单是属于创建型,又叫做静态方法(Static Factory Method),但不属于23种GOF设计之一。简单是由一个对象决定创建出哪一种产品类的例。 简单家族中最简单用的,可以理解为是不同的一个特殊。 定义解释的文字很单调, 下面举例说明 比如一个手机, 它能生产iPhone, Android, Nokia三种手机. 这家的营运家直销, 就是直接卖给用户. 方法使得一个类的例化延迟到其子类 何时使用方法呢? 最后说明, 简单可以比较清晰便捷的同一型对象的创建 但有一个弊端就是, 只能定制创建已经写好的对象, 比如上面这个只能生成iPhone/Android/Nokia这三种手机, 如果你想再定制华为手机或者小米手机

    48721

    Objective-C (下) -- 抽象

    相比简单, 只有一个 能生产的手机也是固定的 抽象类似于有很多家, 当用户要买什么手机就创建对应的去生产 比如用户要买iPhone就创建一个Apple来生产手机, 要买Android 手机就创建一个Goolge 这样创建, , 用户这样就是我们要考虑的因素 (其还有手机, 这里就跳过不讲了跟简单里面一样) 创建要有一个管理对象, 来根据客户的需求自动创建相应的 , 创建并返回手机对象 9 //在只是举例 先不这部分 10 return nil; 11 } 12 13 @end 创建Google GoogleFactory.h 1 , 创建并返回手机对象 9 //在只是举例 先不这部分 10 return nil; 11 } 12 13 @end 下面是管理者 FactoryManager.h负责根据用户需求创建去生产 18 [factory createPhone]; 19 20 } 21 22 23 24 @end 抽象比简单更加灵活

    29720

    Golang情怀-第16期 Go 设计

    使用来解决! } 以上讲解了的小例子,际在我们际开发过程中结构要复杂一些,接下来我们就讨论下抽象,如下: 抽象常用于程序适配多种数据库,以达到开放扩展关闭修改的原则。 ) ♣ 注意:Go的接口是隐的,无须让接口的类型写出了哪些接口。 参考资料: Go https://studygolang.com/articles/25696? fr=sidebar Go抽象 https://www.cnblogs.com/shi2310/p/10899458.html

    24710

    C#(.NET Core) 简单方法设计

    本文源自深入浅出设计. 只不过我是使用C#/.NET Core的例子. 前 当你看见new这个关键字的时候, 就应该想到它是具体的. ? 简单的定义 简单/简易并不是一个设计, 更多是一个编程习惯. 但是使用的非常广泛. 简单类图: ? 这个很简单, 就不解释了.  简单就到这, 下面要讲两个重量级的. 方法 所有的都会封装对象的创建过程, 而方法把对象创建的动作交给了子类, 并让它决定创建哪些对象. 创建者: ? 产品: ? 看看另外一种结构 -- 并行的类结构: ? 方法的定义: 方法定义了一个创建对象的接口, 但是让子类来决定具体创建的是哪一个对象. 方法让一个类延迟例化, 直到子类的出. ? 右边的Creator类里面包含所有方法的除了抽象的方法. 这个抽象的方法在Creator的子类里面必须进行, 产品就是在子类具体方法里面创造出来的.

    2.1K40

    ——结

    前面我们讲了三个,都是万变不离其宗,利用例化不同的对象,虽然可能会多写一些代码,但这会为程序系统带来更方便的扩展性和尽量小的修改。 这种写法,是初学编程时C面向过程的编程方,这种方可能会伴随我们很久很久,就算学到了面向对象,这种思维方也会很久很久挥之不去。 面向对象编程不是用一门面向对象的来编程。 面向对象编程,让我们可维护、可复用、可扩展,低耦合、高内聚,这些到底是什么呢?我们用面向对象的编程方法来这个计算器,并且使用用简单。 这个时候就得用方法了。 同样,我们首先画出UML类图: image.png 应该能明白了吧?如果要新增一个运算方,我们只需操作类和类即可,而不必在原有代码的基础上做修改。 ,如果是方法,我只需再接口类即可,而不用再原有代码上做修改。

    31670

    C# (.NET Core) 抽象设计

    本文的概念性内容来自深入浅出设计一书. 上一篇文章讲了简单方法设计 http://www.cnblogs.com/cgzl/p/8760250.html, 使用的是披萨店的例子. 然后我们要做下面这些内容: 为每个地区创建一个 (PizzaIngredientFactory接口及其方法) 一些原料的类, 它们可以呗使用, 其中某些原料可以跨地区共享 最后我们把上面这些整合到 之前使用方法时, 我们为每个地点创建了不同风格的披萨, 例如 NYCheesePizza, ChicagoCheesePizza. 抽象定义 抽象设计提供了一个接口, 这个接口可以创建一族相关或依赖的对象而无需指明它们具体的类. 下面是类图: ? 对应披萨店的图: ? 方法和抽象的比较 方法是通过继承来创建对象作的. 而抽象则是通过组合的方法. 方法是让子类来创建对象, 客户只需要知道抽象类, 子类做具体的, 解耦.

    75450

    设计之「」的

    尤其对于初学者来说,可以先学习两种最最常用的:「单例」和「」。 「单例」已经在之前的文章中讲过,其中还包括对「设计」的解释,没有看过的可以点击右侧链接先去看一下:无处不在的「单例设计」 00. 是干嘛的?是造东西的。 其和其它造对象的还是有差别的,虽然都是造对象,不同情况下的效力是有区别的。可以帮助我们在某一些复杂的情况下,更好的对我们造的对象进行一个统一的管理,了创造者和构造者的分离。 说到「分离」,我在这里再插一句,际上这些设计,很多时候就是用来做分离,这就和平时的分协作一样,可以让我们的作做的更专业更有效率。 就像越大的企业内部分的越细致,同理越大的软件越需要设计。 01.简单 下面就用一个简单的例子来演示一下

    14940

    Springboot中策略+

    策略相信大家都比较熟悉,但是大家有没有在springboot中策略和? 具体策略的UML我就不给出来了,使用这个这两个主要是防止程序中出大量的IF ELSE IF ELSE....。接下来咱们直接,项目结构图: ? 类FactoryStrategy负责创建策略的,代码比较简单,比较关键的一点是AutoWired一个Map<String, Strategy> 这个会在初始化的时候将所有的Strategy自动加载到 huangqingshi * @Date 2019-01-31 */ public interface Strategy { String doOperation(); } 定义接口的 后续如果有新策略的话,直接即可。 ? ?----

    38020

    的三种

    顾名思义就是创建产品,根据产品是具体产品还是具体可分为简单方法,根据的抽象程度可分为方法和抽象。该用于封装和管理对象的创建,是一种创建型。 简单   该对对象创建管理方最为简单,因为其仅仅简单的对不同类对象的创建进行了一层薄薄的封装,该通过向传递类型来指定要创建的对象。    方法(Factory Method)   和简单负责生产所有产品相比,方法将生成具体产品的任务分发给具体的产品。 抽象通过在AbstarctFactory中增加创建产品的接口,并在具体子新加产品的创建,当然前提是子支持生产该产品。否则继承的这个接口可以什么也不干。 } } 总结:   上面介绍的三种有各自的应用场景,际应用时能解决问题满足需求即可,可灵活变通,无所谓高级与低级。

    14230

    设计学习(四): 1.简单 (附C#)

    这是一个典型的情况, 我们需要在运行时来例化一些具体的类. 在需要修改或者扩展的时候我们就需要改这段代码. 一个程序中可能会多次出类似的代码, 这使得维护和更新非常困难而且容易出错. 通过面向接口的编程, 我们可以把自己从各种变化中隔离出来, 因为如果代码是面向接口的话, 那么通过多态机制, 任何了该接口的新类都可以直接被使用. 所以别忘了设计原则: 对修改关闭. 针对这种对象, 它有一个名字, 叫(Factory). 会处理对象创建的细节. 建立一个简单的披萨 ? 这个类只有一个任务: 为客户创建披萨. 为什么不适用静态(static)方法? 简单 Simple Factory 简单际上并不是设计, 可以更多的认为是一种编程范. 但是使用的却是非常广泛. 理清一下目前的情况: ? C#: namespace C04FactoryPattern.Bases { public interface IPizza { string Type { get

    39260

    ChashMap

    InsertHashMap(hashMap, "b", "b1"); InsertHashMap(hashMap, "b", "b2"); InsertHashMap(hashMap, "c" hashUtil.c #include <stdio.h> #include <string.h> #include <ctype.h> #include "hashUtil.h" /** * MySql中出的字符串 hash ^= (unsigned int) *(unsigned char*) key; } return (hash); } /** * MySql中出的字符串 hash ^= (unsigned int) (unsigned char) toupper(*key); } return (hash); } /** * PHP中出的字符串 h = h ^ (g >> 24); h = h ^ g; } } return h; } /** * OpenSSL中出的字符串

    1.2K61

    ChashMap

    InsertHashMap(hashMap, "b", "b1"); InsertHashMap(hashMap, "b", "b2"); InsertHashMap(hashMap, "c" hashUtil.c #include <stdio.h> #include <string.h> #include <ctype.h> #include "hashUtil.h" /** * MySql中出的字符串 hash ^= (unsigned int) *(unsigned char*) key; } return (hash); } /** * MySql中出的字符串 hash ^= (unsigned int) (unsigned char) toupper(*key); } return (hash); } /** * PHP中出的字符串 h = h ^ (g >> 24); h = h ^ g; } } return h; } /** * OpenSSL中出的字符串

    56130

    使用C# (.NET Core) 抽象设计 (Abstract Pattern)

    本文的概念性内容来自深入浅出设计一书. 上一篇文章讲了简单方法设计 http://www.cnblogs.com/cgzl/p/8760250.html, 使用的是披萨店的例子. 首先是的接口: 然后我们要做下面这些内容: 为每个地区创建一个 (PizzaIngredientFactory接口及其方法) 一些原料的类, 它们可以呗使用, 其中某些原料可以跨地区共享 之前使用方法时, 我们为每个地点创建了不同风格的披萨, 例如 NYCheesePizza, ChicagoCheesePizza. 按照其他序加并返回披萨. 抽象定义 抽象设计提供了一个接口, 这个接口可以创建一族相关或依赖的对象而无需指明它们具体的类. 方法: 抽象: 总结 C#/.NET Core代码  原料接口: namespace AbstractFactoryPattern.Abstractions { public

    6320

    go设计(三):

    真的是一个好东西。所谓,就是说,某几个类中相同的操作和代码提取到父类的一个函数中,并定义相同的操作为抽象函数。由子类来。估计我也没表达清楚,下面还是看代码来讲解吧。 这两个类的功能和执行步骤高度类似,但是,获取数据的方不同。在这两个类中势必存在大量结构相同的代码。在,我们使用来重构这两个类。 另外,我们最最好用的go,是没有抽象类,抽象函数之类的概念的,所以我使用了一个指向一个函数的指针(func() string)来抽象函数。  string {     return "this is net doc." } 大家仔细看代码就能发,我们的子类中可以包含父类的结构,虽然go不能继承,但是通过这种方,我们也能过一过“继承” 对这个文档做了一些处理,文档是: this is a LocalDoc. */ 在go中,如果子类包含了父类的结构,我们就能直接用子类“.”出父类的函数。这不得不说是一个伟大的特性。

    33230

    扫码关注云+社区

    领取腾讯云代金券