23种设计模式趣味讲解
- 格式:pdf
- 大小:186.43 KB
- 文档页数:6
1、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM 爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。
麦当劳和肯德基就是生产鸡翅的Factory。
工厂模式:客户类和工厂类分开。
消费者任何时候需要某种产品,只需向工厂请求即可。
消费者无须修改就可以接纳新产品。
缺点是当产品修改时,工厂类也要做相应的修改。
如:如何创建及如何向客户端提供。
2、BUILDER—MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。
(这一定比美军在伊拉克用的翻译机好卖)建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。
建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。
建造模式可以强制实行一种分步骤进行的建造过程。
3、FACTORY METHOD—请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM 到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。
工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
4、PROTOTYPE—跟MM用QQ聊天,一定要说些深情的话语了,我搜集了好多肉麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了。
(100块钱一份,你要不要)原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。
新版设计模式手册一.创建型模式1.单件模式意图保证一个类仅有一个实例,并提供一个访问它的全局访问点。
适用性当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
2.抽象工厂意图提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用性一个系统要独立于它的产品的创建、组合和表示时。
一个系统要由多个产品系列中的一个来配置时。
当你要强调一系列相关的产品对象的设计以便进行联合使用时。
当你提供一个产品类库,而只想显示它们的接口而不是实现时。
3.建造者模式意图将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
适用性当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
当构造过程必须允许被构造的对象有不同的表示时。
4.工厂方法模式意图定义一个用于创建对象的接口,让子类决定实例化哪一个类。
Factory Method 使一个类的实例化延迟到其子类。
适用性当一个类不知道它所必须创建的对象的类的时候。
当一个类希望由它的子类来指定它所创建的对象的时候。
当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
5.原型模式意图用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
适用性当要实例化的类是在运行时刻指定时,例如,通过动态装载;或者为了避免创建一个与产品类层次平行的工厂类层次时;或者当一个类的实例只能有几个不同状态组合中的一种时。
建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。
二.结构型模式6.适配器模式意图将一个类的接口转换成客户希望的另外一个接口。
Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适用性你想使用一个已经存在的类,而它的接口不符合你的需求。
面向对象设计的23个设计模式详解面向对象设计是一种广泛应用于软件开发的思想,其核心在于将数据和操作封装在一起形成对象,并通过各种方式进行交互和组合,从而实现复杂的功能。
在这一过程中,设计模式起到了非常重要的作用,可以有效地提高代码的可读性、可维护性和可扩展性。
本文将对23种常见的设计模式进行详解。
一、创建型模式1.简单工厂模式简单工厂模式属于创建型模式,其目的是提供一个工厂类,使得创建对象的过程更加简单。
在这种模式中,使用者只需要提供所需对象的参数,而无需关心对象的具体实现细节。
简单工厂模式适合于对象创建过程较为简单的情况。
2.工厂方法模式工厂方法模式是简单工厂模式的进一步扩展,其核心在于将工厂类进行接口抽象化,使得不同的工厂类可以创建不同的对象实例。
工厂方法模式适合于对象创建过程较为复杂的情况。
它可以为工厂类添加新的产品类型,而不会影响原有的代码。
3.抽象工厂模式抽象工厂模式是工厂方法模式的进一步扩展,其目的是提供一个可以创建一系列相关或者独立的对象的接口。
在抽象工厂模式中,使用者只需要关心所需对象组合的类型,而无需关注对象的具体实现过程。
4.建造者模式建造者模式也是一种创建型模式,其目的在于将复杂对象分解为多个简单的部分,并将其组装起来形成复杂对象实例。
在建造者模式中,使用者只需要关注所需对象以及它们的组合方式,而无需关心对象的具体实现过程。
5.原型模式原型模式是一种基于克隆的创建型模式,其核心在于通过复制现有的对象实例来创建新的对象。
在原型模式中,对象实例的创建过程与对象所包含的状态密切相关。
原型模式适合于创建复杂对象实例,且这些对象实例之间是相对独立的情况。
二、结构型模式6.适配器模式适配器模式是一种结构型模式,其目的在于将一个类的接口转换为另一个类所能使用的接口。
在适配器模式中,使用者可以通过不同的适配器实现对象之间的互相调用。
7.桥接模式桥接模式是一种结构型模式,其目的在于将抽象部分与实现部分相互分离,从而使得两者可以独立变化。
23种设计模式范文设计模式是软件开发中常用的解决方案模式,它们代表了在面对特定问题时的最佳实践和经验总结。
设计模式可以帮助我们更好地组织和设计代码,提高代码的可读性、可维护性和可扩展性。
在本文中,我们将介绍23种常用的设计模式,并分别讨论它们的实现原理和在实际开发中的应用场景。
1. 单例模式(Singleton Pattern)单例模式是最简单的设计模式之一,它确保一个类只有一个实例,并提供一个全局访问点。
在实现上,可以通过将构造函数私有化,然后提供一个静态方法返回实例来实现单例。
应用场景:在需要实现全局唯一访问点的场景下,比如线程池、配置管理器等。
2. 工厂模式(Factory Pattern)工厂模式是用来创建对象的一种模式,它将对象的创建和实现分离,使得代码更易于维护和扩展。
工厂模式有简单工厂模式、工厂方法模式和抽象工厂模式等几种不同的变体。
应用场景:在需要根据不同条件创建不同对象的场景下,比如数据库连接、日志记录等。
3. 抽象工厂模式(Abstract Factory Pattern)抽象工厂模式是工厂模式的一种扩展,它提供一个创建一系列相关或相互依赖对象的接口,而无需指定实际的类。
抽象工厂模式将一组工厂类封装起来,使其可以交换或者替换。
应用场景:在需要创建一组相关对象(如界面主题、操作系统等)并且需要保持一致性的场景下。
4. 建造者模式(Builder Pattern)建造者模式是用来生成复杂对象的一种模式,它将对象的构建与其表现分离,采用逐步构建的方式生成对象,可以让客户端不需要知道具体的构建细节。
应用场景:在构造过程比较复杂,需要多个组件协同工作的场景下,比如构建复杂的UI界面。
5. 原型模式(Prototype Pattern)原型模式是用来克隆对象的一种模式,它通过复制已有对象的原型来创建新的对象,避免了通过构造函数创建对象和初始化成员变量的重复过程。
应用场景:在需要创建大量相似对象或者初始化成本较高的对象时,可以使用原型模式。
23种设计模式详解设计模式是指面向对象编程中,经过多次验证、被广泛接受的代码实现方法。
这些设计模式可以帮助开发者更快地解决问题,提高代码的可读性、可维护性、可扩展性。
目前,常用的设计模式有23种。
下面,我们来详细介绍一下这23种设计模式。
1. 单例模式(Singleton)单例模式是一种只允许生成一个实例的模式。
在实例化对象时,单例模式的生成过程比较特殊,需要先判断该类是否已经实例化过,如果已经实例化,则直接返回已有的实例对象,否则再进行实例化。
2. 工厂模式(Factory)工厂模式是一种生产对象实例的设计模式。
它将对象实例的生成过程封装在一个工厂类中,客户端需要对象时,只需要调用工厂类中对应的方法即可。
3. 抽象工厂模式(Abstract Factory)抽象工厂模式是一种扩展了工厂模式的模式。
它可以生成一系列相关或相互依赖的对象实例。
具体实现时,通常需要定义一个抽象工厂类和一些具体工厂类,来生产各种相关的对象实例。
4. 建造者模式(Builder)建造者模式是一种用于构建复杂对象的模式。
它将一个复杂对象的构建过程分解成多个简单的步骤,然后通过一个指挥者来管理这些步骤的执行,最终构建出一个复杂的对象。
5. 原型模式(Prototype)原型模式是一种通过复制已有对象来创建新对象的模式。
一般来说,系统中的对象包含大量相同或相似的部分,通过复制对象可以帮助我们节省生成对象的时间和资源。
6. 适配器模式(Adapter)适配器模式是一种将不兼容接口转换为兼容接口的模式。
具体实现时,需要定义一个适配器类,该类实现了客户端所期望的接口,而且还包装了原有不兼容的接口,使其能够兼容客户端期望的接口。
7. 桥接模式(Bridge)桥接模式是一种将抽象部分与其实现部分分离开来的模式。
具体实现时,需要定义抽象部分和实现部分的接口,然后定义一个桥接类,将抽象部分和实现部分联系起来。
8. 组合模式(Composite)组合模式是一种将具有相同属性和方法的对象组合成树形结构的模式。
追MM与设计模式(23种设计模式巧妙解析,趣味理解)2017-04-26程序员共读在网络上流畅很广的一篇旧文,暂时没找到原作者,目前所看到的最早转载时间是 2005 年 2 月 28 日。
作者用轻松的语言,形象解释了 23 种模式,有很好的启发作用。
创建型模式1、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。
麦当劳和肯德基就是生产鸡翅的Factory工厂模式:客户类和工厂类分开。
消费者任何时候需要某种产品,只需向工厂请求即可。
消费者无须修改就可以接纳新产品。
缺点是当产品修改时,工厂类也要做相应的修改。
如:如何创建及如何向客户端提供。
2、BUILDER—MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。
(这一定比美军在伊拉克用的翻译机好卖)建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。
建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。
建造模式可以强制实行一种分步骤进行的建造过程。
3、FACTORY METHOD—请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。
工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
23种设计模式的经典运用介绍设计模式是解决软件设计中常见问题的可重复使用的解决方案。
本文将介绍23种经典的设计模式,并给出它们在实际开发中的应用示例。
通过学习这些设计模式,您将增加对软件设计的理解,并能够更好地解决问题。
创建型设计模式1.工厂方法模式(F a c t o r y M e t h o d)工厂方法模式通过定义一个创建对象的接口,但由子类决定实例化具体类。
这种方法可以延迟实例化过程,具有更高的灵活性和可扩展性。
应用场景:-在一个系统中,希望客户端与具体类的实例化解耦。
-希望通过增加具体类的扩展来增加系统的灵活性。
2.抽象工厂模式(A b s t r a c t F a c t o r y)抽象工厂模式提供一个接口,用于创建相关或依赖对象组。
这种模式将对象的实例化推迟到子类中,从而实现了解耦。
应用场景:-当一个系统独立于其产品的创建、组合和表示时。
-当需要一个系列的相互依赖的对象而无需指定其具体类时。
3.单例模式(S i n gl e t o n)单例模式确保一个类只有一个实例,并提供一个全局访问点。
这种模式常用于控制对资源的访问,例如数据库连接或日志文件。
应用场景:-当需要一个类的唯一实例,并且该实例需要被多个客户端共享时。
-当需要限制系统中特定类的实例数量时。
4.原型模式(P r o to t y p e)原型模式通过复制现有对象来创建新对象。
这种模式对于创建需要消耗大量资源的对象非常有用,可以通过克隆现有对象来提高性能。
应用场景:-当一个系统的某些对象的创建比较昂贵时。
-当需要避免构造函数调用,而直接通过复制现有对象来创建新对象时。
5.建造者模式(B ui l d e r)建造者模式将一个复杂对象的构建过程与其表现分离,使得相同的构建过程可以创建不同的表现。
应用场景:-当想要构建一些复杂对象时,如生成器。
-当需要创建对象的过程具有多个步骤,并且每个步骤都可以按需选择或省略时。
结构型设计模式6.适配器模式(A da p t e r)适配器模式将一个类的接口转换为客户端所期望的另一个接口。
设计模式23个模式和意图:(1)抽象工厂(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
(2)适配器(Adapter):将一个类的接口转换成客户希望的另外一个接口。
Adapter模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。
(3)桥接(Bridge):将抽象部分与它的实现部分分离,是他们都可以独立的变化。
(4)生成器(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
(5)职责连(Chain of responsibility):为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求。
将这些对象连成一条连,并沿着这条连传递该请求,直到有一个对象处理它。
(6)命令(Command):将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。
(7)组成(Composite):将对象组合成树形结构以表示“部分—整体”的层次结构。
Composite使得客户对单个对象和复合对象的使用具有一致性。
(8)装饰(Decorator):动态的给一个对象添加一些额外的职责。
就扩展功能而言,Decorator模式比生成子类模式更为灵活。
(9)外观(Facade):为子系统中的一类接口提供一个一致的界面,Fa?ade模式定义了一个高层接口,这个接口使得这一子系统更为灵活。
(10)工厂方法(Factory method):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。
Factory method使得一个类的实例化延迟到其子类。
(11)享元(Flyweight):运用共享技术有效的支持大量细粒度的对象。
(12)解释器(Interperter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
1.对设计模式了解少?项目中是否有运用到?对于23种设计模式都有学习过最少超过两三次吧,主要是学习到了一些设计思想,当通过对一些框架低层的了解,比如spring 中的AOP就用到了很多代理模式,通过代理一个对像,来对我们的方法进行控制,代理后,用到了装饰器模式(项目中操作记录日志,封装对像),装饰我们的目标对象,对我们的方法前后进后不同的操作,比如开启事务,日志处理、提交、回滚、结果返回等操作。
(1)比如java的io体系,可以一层包装一层,外面的一层,都会对里面的一层进行功能的增强。
(2)还有就是spring的aop,aop这块可以基于动态代理的理念,装饰我们的目标对象,然后加入事务控制,日志打印之类的功能。
当然这一串的操作不可能在一个方法中处理,就用到了责任连模式,通过链式调用,按不同的顺执行。
在我们项目中,比如导出功能,用到了模板设计模式,以及价格计算用到了策略模式加工厂模式,计算以责任连模式进行对不同价格的计算或项目中对8种税的计算流程,根据不同的类型计算得到不同的对像,执行不同的计算逻辑,也用到了模板设计模式加工厂模式,不管你算什么价,最终这个价都不能低于地板价都需要对地板价进行校验,这样,地板价校验都是公共的抽成模板处理方式,每个特殊的算价走对应的抽像方法执行算价。
项目中的采购入库及退货入库,都会进行库存数据的修改,一些公用的比如对商品的更新、数量加减这一顺序基本一样,可以抽成模板设计、然后不同的逻辑对应的类去执行这就是命令模式,在把这些逻辑封装在一个工厂里面,就成了工厂模式。
策略模式跟命令模式的区别?看起来一样的,但是用处不一样。
命令是可以发送出去,然后可以经过一些队列的流转,比如先把命令发送到MQ,接着再处理。
策略是说选择了一组策略,立即就要执行的,不会经过其他别的什么处理。
而且策略逻辑基本就是用在复杂的if else代码中的命令模式,可以用在更多别的场景中思想是不一样的,也许实现上,接口、实现类、工厂来做的,适合的场景是不一样的状态模式状态模式里,非常重要的一点就是将状态之间流转的逻辑,封装在Context类里面。
浅析23种软件设计模式软件设计模式是解决特定问题的一种经过验证的解决方案。
它们是开发者在软件设计过程中基于经验总结出来的最佳实践。
《设计模式》一书中总结了23种常见的软件设计模式,本文将对这23种模式进行浅析。
一、创建型模式1. 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。
常用于线程池、数据库连接等需要全局唯一实例的场景。
2. 工厂模式(Factory Pattern):通过工厂类创建对象,将对象的创建与使用分离,提供了一种统一的接口来创建各种不同类型的对象。
3. 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。
4. 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
5. 原型模式(Prototype Pattern):通过克隆对象来创建新的对象,避免了通过new关键字创建对象的开销。
二、结构型模式6. 适配器模式(Adapter Pattern):将一个类的接口转换成客户端所期望的另一个接口,使得原本因接口不兼容而不能在一起工作的类可以一起工作。
7. 桥接模式(Bridge Pattern):将抽象与实现分离,使它们可以独立变化。
通过组合的方式来实现类之间的关系。
9. 装饰器模式(Decorator Pattern):动态地给一个对象添加一些额外的职责,同时不改变其原有的结构。
10. 外观模式(Facade Pattern):为一组复杂的子系统提供一个更高级别的接口,简化对子系统的访问。
11. 享元模式(Flyweight Pattern):运用共享技术来有效支持大量细粒度对象的复用。
12. 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。
三、行为型模式13. 模板方法模式(Template Method Pattern):定义一个操作中的算法框架,将一些步骤延迟到子类中实现。
面向对象的23种设计模式设计模式是在软件开发过程中常用的一种解决问题的方法论,它提供了一套经过验证的经验总结,可以帮助开发人员更加高效地设计和实现软件系统。
面向对象的23种设计模式是常用的设计模式中最经典和最重要的一部分,它们分别属于创建型模式、结构型模式和行为型模式三个大类,下面将分别介绍这23种设计模式。
一、创建型模式1.工厂模式(Factory Pattern):定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到子类。
2.抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
3.单例模式(Singleton Pattern):确保类只有一个实例,并提供一个全局访问点。
4.建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
5.原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
二、结构型模式6.适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另一个接口,使得原本不兼容的类可以一起工作。
7.桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们可以独立变化。
8.组合模式(Composite Pattern):将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
9.装饰者模式(Decorator Pattern):动态地给一个对象添加一些额外的职责,同时又不改变其结构。
10.外观模式(Facade Pattern):为子系统中的一组接口提供一个一致的界面,定义了一个高层接口,使得这一子系统更加容易使用。
11.享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象。
23种设计模式范文设计模式是用来解决软件设计中的常见问题的经验总结和最佳实践。
这些模式抽象了实际应用中的问题,并提供了相应的解决方案。
本文将介绍23种经典的设计模式,并简要描述它们的用途和示例。
1.创建型模式-单例模式:保证一个类只有一个实例,并提供一个全局访问点。
-工厂模式:将对象的创建委托给工厂类,隐藏具体实现细节。
-抽象工厂模式:提供一个用于创建一系列相关或相互依赖对象的接口。
-建造者模式:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
-原型模式:通过复制已有对象来创建新对象,避免了直接创建对象的开销。
2.结构型模式-适配器模式:将一个类的接口转换成客户希望的另一个接口。
-桥接模式:将抽象部分与其实现部分相分离,使它们可以独立变化。
-组合模式:将对象组合成树形结构以表示"部分-整体"的层次结构。
-装饰者模式:动态地给对象添加额外的职责,同时又不改变其结构。
-外观模式:为复杂子系统提供一个简化的接口。
-享元模式:通过共享对象来实现对大量细粒度对象的有效共享。
3.行为型模式-模板方法模式:定义一个操作中的算法框架,将一些步骤的具体实现延迟到子类中。
-命令模式:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化。
-迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部表示。
-观察者模式:定义对象之间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都会得到通知。
-中介者模式:用一个中介对象封装一系列对象的交互,使各对象不需要显示地相互引用。
-备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
-解释器模式:给定一个语言,定义它的语法的一种表示,并定义一个解释器来解释该语言中的句子。
-状态模式:允许对象在其内部状态改变时改变它的行为。
-空对象模式:使用一个空对象来代替NULL对象的检查。
23种编程设计模式编程设计模式是在软件开发过程中经过实践验证的解决问题的方案,它们是解决常见问题的模板。
在设计模式的指导下,开发人员可以更加高效地开发出可维护、可扩展的软件。
本文将介绍23种常见的编程设计模式。
1.创建型模式:-工厂方法模式:当需要创建复杂对象时,通过工厂方法来解决对象的创建问题,将具体对象的创建延迟到子类中。
-抽象工厂模式:提供一个接口,用于创建一系列相关或相互依赖的对象,而不需要指定具体类。
-单例模式:确保类只有一个实例,并提供一个全局访问点。
-原型模式:通过复制现有对象的方式,创建新的对象。
2.结构型模式:-适配器模式:将一个类的接口转换成客户期望的另一个接口,使得原本因接口不兼容而无法工作的类可以一起工作。
-桥接模式:将抽象部分与它们的实现部分分离,以便二者可以独立地变化。
-组合模式:将对象组合成树形结构以表示“整体-部分”层次结构。
-装饰器模式:动态地给对象添加一些额外的职责,而不需要修改其原始类的代码。
-外观模式:提供一个统一的接口,用于访问子系统中一群接口的功能。
-享元模式:通过共享对象来减少内存使用量。
-代理模式:为其他对象提供一个代理,以控制对这个对象的访问。
3.行为型模式:-责任链模式:将请求的发送者和接收者解耦。
-命令模式:将请求封装成一个对象,从而允许参数化对客户端不同的请求、排队或记录请求日志,以及支持可撤消的操作。
-解释器模式:定义一个语言的文法,并且建立一个解释器来解释该语言中的句子。
-迭代器模式:提供一种顺序访问聚合对象中各个元素的方法,而又不暴露聚合对象的内部表示。
-中介者模式:用一个中介对象来封装一系列的对象交互。
-备忘录模式:在不违背封装原则的前提下,保存对象内部状态的快照,以便在将来需要时恢复到该状态。
-观察者模式:定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生变化时,所有依赖它的对象都得到通知。
-状态模式:允许对象在其内部状态改变时改变它的行为。
23种设计模式(详解)1、factory(工厂)?追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。
麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开。
消费者任何时候需要某种产品,只需向工厂请求即可。
消费者无须修改就可以接纳新产品。
缺点是当产品修改时,工厂类也要做相应的修改。
如:如何创建及如何向客户端提供。
?2、builder(建造)?MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你” builder。
(这一定比美军在伊拉克用的翻译机好卖)建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。
建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。
建造模式可以强制实行一种分步骤进行的建造过程。
3、factory method(工厂方法)?请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。
工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
4、prototype(原始)?跟MM用QQ聊天,一定要说些深情的话语了,我搜集了好多肉麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了。
(100块钱一份,你要不要)原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。
23种设计模式趣味讲解对设计模式很有意思的诠释,呵呵,原作者不详。
创立型模式1、FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,固然口味有所不同,但不管你带MM往麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。
麦当劳和肯德基就是生产鸡翅的Factory工厂模式:客户类和工厂类离开。
花费者任何时候需要某种产品,只需向工厂恳求即可。
花费者无须修正就可以接纳新产品。
毛病是当产品修正时,工厂类也要做相应的修正。
如:如何创立及如何向客户端供给。
2、BUILDER—MM最爱听的就是“我爱你”这句话了,见到不同处所的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM 我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。
(这必定比美军在伊拉克用的翻译机好卖)建造模式:将产品的内部表象和产品的天生过程分割开来,从而使一个建造过程天生具有不同的内部表象的产品对象。
建造模式使得产品内部表象可以独立的变更,客户不必知道产品内部组成的细节。
建造模式可以强迫履行一种分步骤进行的建造过程。
3、FACTORY METHOD—请MM往麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。
工厂方法模式:核心工厂类不再负责所有产品的创立,而是将具体创立的工作交给子类往做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的串口,而不接触哪一个产品类应当被实例化这种细节。
4、PROTOTYPE—跟MM用QQ聊天,必定要说些深情的话语了,我搜集了好多肉麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了。
(100块钱一份,你要不要)原始模型模式:通过给出一个原型对象来指明所要创立的对象的类型,然后用复制这个原型对象的方法创立出更多同类型的对象。
原始模型模式容许动态的增加或减少产品类,产品类不需要非得有任何事先断定的等级结构,原始模型模式实用于任何的等级结构。
毛病是每一个类都必须配备一个克隆方法。
5、SINGLETON—俺有6个美丽的老婆,她们的老公都是我,我就是我们家里的老公Sigleton,她们只要说道“老公”,都是指的同一个人,那就是我(刚才做了个梦啦,哪有这么好的事)单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向全部系统供给这个实例单例模式。
单例模式只应在有真正的“单一实例”的需求时才可应用。
结构型模式6、ADAPTER—在朋友聚会上碰到了一个美女Sarah,从香港来的,可我不会说粤语,她不会说普通话,只好求助于我的朋友kent了,他作为我和Sarah之间的Adapter,让我和Sarah 可以相互交谈了(也不知道他会不会耍我)适配器(变压器)模式:把一个类的串口变换成客户端所等待的另一种串口,从而使底本因串口原因不匹配而无法一起工作的两个类能够一起工作。
适配类可以根据参数返还一个合适的实例给客户端。
7、BRIDGE—早上碰到MM,要说早上好,晚上碰到MM,要说晚上好;碰到MM穿了件新衣服,要说你的衣服好美丽哦,碰到MM新做的发型,要说你的头发好美丽哦。
不要问我“早上碰到MM新做了个发型怎么说”这种题目,自己用BRIDGE组合一下不就行了桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变更,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间应用组合/聚合关系而不是继续关系,从而使两者可以独立的变更。
8、COMPOSITE—Mary今天过诞辰。
“我过诞辰,你要送我一件礼物。
”“嗯,好吧,往商店,你自己挑。
”“这件T恤挺美丽,买,这条裙子好看,买,这个包也不错,买。
”“喂,买了三件了呀,我只答应送一件礼物的哦。
”“什么呀,T恤加裙子加包包,正好配成一套呀,小姐,麻烦你包起来。
”“……”,MM都会用Composite模式了,你会了没有?合成模式:合成模式将对象组织到树结构中,可以用来描写整体与部分的关系。
合成模式就是一个处理对象的树结构的模式。
合成模式把部分与整体的关系用树结构表现出来。
合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。
9、DECORATOR—Mary过完轮到Sarly过诞辰,还是不要叫她自己挑了,不然这个月伙食费确定玩完,拿出我往年在西岳顶上照的照片,在背面写上“最好的的礼物,就是爱你的Fita”,再到街上礼品店买了个像框(卖礼品的MM也很美丽哦),再找隔壁搞美术设计的Mike设计了一个美丽的盒子装起来……,我们都是Decorator,终极都在润饰我这个人呀,怎么样,看懂了吗?装饰模式:装饰模式以对客户端透明的方法扩大对象的功效,是继续关系的一个替换计划,供给比继续更多的机动性。
动态给一个对象增加功效,这些功效可以再动态的取消。
增加由一些基础功效的排列组合而产生的非常大批的功效。
10、FACADE—我有一个专业的Nikon相机,我就爱好自己手动调光圈、快门,这样照出来的照片才专业,但MM可不懂这些,教了半天也不会。
幸好相机有Facade设计模式,把相机调剂到主动档,只要对准目标按快门就行了,一切由相机主动调剂,这样MM也可以用这个相机给我拍张照片了。
门面模式:外部与一个子系统的通信必须通过一个同一的门面对象进行。
门面模式供给一个高层次的串口,使得子系统更易于应用。
每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。
但全部系统可以有多个门面类。
11、FLYWEIGHT—天天跟MM发短信,手指都累死了,最近买了个新手机,可以把一些常用的句子存在手机里,要用的时候,直接拿出来,在前面加上MM的名字就可以发送了,再不用一个字一个字敲了。
共享的句子就是Flyweight,MM的名字就是提取出来的外部特点,根据高低文情况应用。
享元模式:FLYWEIGHT在拳击比赛中指最轻量级。
享元模式以共享的方法高效的支撑大批的细粒度对象。
享元模式能做到共享的要害是区分内蕴状态和外蕴状态。
内蕴状态存储在享元内部,不会随环境的转变而有所不同。
外蕴状态是随环境的转变而转变的。
外蕴状态不能影响内蕴状态,它们是相互独立的。
将可以共享的状态和不可以共享的状态从惯例类中区离开来,将不可以共享的状态从类里剔除出往。
客户端不可以直接创立被共享的对象,而应当应用一个工厂对象负责创立被共享的对象。
享元模式大幅度的下降内存中对象的数目。
12、PROXY—跟MM在网上聊天,一开头总是“hi,你好”,“你从哪儿来呀?”“你多大了?”“身高多少呀?”这些话,真烦人,写个程序做为我的Proxy吧,凡是接收到这些话都设置好了主动的答复,接收到其他的话时再通知我答复,怎么样,酷吧。
代理模式:代理模式给某一个对象供给一个代理对象,并由代理对象把持对源对象的引用。
代理就是一个人或一个机构代表另一个人或者一个机构采用举动。
某些情况下,客户不想或者不能够直接引用一个对象,代理对象可以在客户和目标对象直接起到中介的作用。
客户端分辨不出代理主题对象与真实主题对象。
代理模式可以并不知道真正的被代理对象,而仅仅持有一个被代理对象的串口,这时候代理对象不能够创立被代理对象,被代理对象必须有系统的其他角色代为创立并传进。
行动模式13、CHAIN OF RESPONSIBLEITY—晚上往上英语课,为了好开溜坐到了最后一排,哇,前面坐了好几个美丽的MM哎,找张纸条,写上“Hi,可以做我的女朋友吗?假如不愿意请向前传”,纸条就一个接一个的传上往了,糟糕,传到第一排的MM把纸条传给老师了,听说是个老童贞呀,快跑!义务链模式:在义务链模式中,很多对象由每一个对象对其下家的引用而接起来形成一条链。
恳求在这个链上传递,直到链上的某一个对象决定处理此恳求。
客户并不知道链上的哪一个对象终极处理这个恳求,系统可以在不影响客户真个情况下动态的重新组织链和分配义务。
处理者有两个选择:承担义务或者把义务推给下家。
一个恳求可以终极不被任何接收端对象所接收。
14、COMMAND—俺有一个MM家里管得特别严,没法会晤,只好借助于她弟弟在我们俩之间传送信息,她对我有什么唆使,就写一张纸条让她弟弟带给我。
这不,她弟弟又传送过来一个COMMAND,为了感谢他,我请他吃了碗杂酱面,哪知道他说:“我同时给我姐姐三个男朋友送COMMAND,就数你最吝啬,才请我吃面。
”,:-(命令模式:命令模式把一个恳求或者操纵封装到一个对象中。
命令模式把发出命令的义务和履行命令的义务分割开,委派给不同的对象。
命令模式容许恳求的一方和发送的一方独立开来,使得恳求的一方不必知道接收恳求的一方的串口,更不必知道恳求是怎么被接收,以及操纵是否履行,何时被履行以及是怎么被履行的。
系统支撑命令的取消。
15、INTERPRETER—俺有一个《泡MM真经》,上面有各种泡MM的攻略,比如说往吃西餐的步骤、往看电影的方法等等,跟MM约会时,只要做一个Interpreter,照着上面的脚本履行就可以了。
说明器模式:给定一个语言后,说明器模式可以定义出其文法的一种表现,并同时供给一个说明器。
客户端可以应用这个说明器来说明这个语言中的句子。
说明器模式将描写怎样在有了一个简略的文法后,应用模式设计说明这些语句。
在说明器模式里面提到的语言是指任何说明器对象能够说明的任何组合。
在说明器模式中需要定义一个代表文法的命令类的等级结构,也就是一系列的组合规矩。
每一个命令对象都有一个说明方法,代表对命令对象的说明。
命令对象的等级结构中的对象的任何排列组合都是一个语言。
16、ITERATOR—我爱上了Mary,不顾一切的向她求婚。
Mary:“想要我跟你结婚,得答应我的条件”我:“什么条件我都答应,你说吧”Mary:“我看上了那个一克拉的钻石”我:“我买,我买,还有吗?”Mary:“我看上了湖边的那栋别墅”我:“我买,我买,还有吗?”Mary:“你的小弟弟必需要有50cm长”我脑袋嗡的一声,坐在椅子上,一咬牙:“我剪,我剪,还有吗?”……迭代子模式:迭代子模式可以次序访问一个凑集中的元素而不必裸露凑集的内部表象。
多个对象聚在一起形成的总体称之为凑集,凑集对象是能够包容一组对象的容器对象。
迭代子模式将迭代逻辑封装到一个独立的子对象中,从而与凑集本身隔开。
迭代子模式简化了凑集的界面。
每一个凑集对象都可以有一个或一个以上的迭代子对象,每一个迭代子的迭代状态可以是彼此独立的。
迭代算法可以独立于凑集角色变更。
17、MEDIATOR—四个MM打麻将,相互之间谁应当给谁多少钱算不明白了,幸亏当时我在旁边,按照各自的筹码数算钱,赚了钱的从我这里拿,赔了钱的也付给我,一切就OK啦,俺得到了四个MM的电话。