一 、创建型模式
  1.1单例模式
   设计原则:无
   介绍:在整个应用中只有一个对象
  1.2简单工厂
simplefactory
  常用场景:需要在一堆产品中选择其中一个产品
  介绍:通过工厂类去创建产品,调用者不用直接去创建对象,并封装了对象的创建细节。
  设计原则:遵循单一职责 、违背开闭原则(生成不同对象,需要实现不同的工厂类,扩展性不好)
 1.3工厂方法模式
   factoryMethod
   常用场景:一种场景是希望工厂与产品的种类对客户端保持透明,给客户端提供一致的操作,另外一种是不同的工厂和产品可以提供客户端不同的服务或功能
   介绍:工厂方法模式又叫虚拟构造子模式或者多态性共存模式,工厂模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中
   设计原则:单一指责,依赖倒置,开闭原则
 1.4抽象工厂
  abstractFactory
    常用场景:需要一个接口可以提供一个产品族,且不必知道产品的具体种类
    介绍: 工厂方法模式与抽象工厂模式最大的区别在于,在工厂方法模式中,工厂创造的是一个产品,而在抽象工厂模式中,工厂创造的是一个产品族。
    设计原则:单一指责,依赖倒置,开闭原则
1.5建造者模式
builder
    常用场景:需要构建一批构建过程相同但表示不同的产品,而构建过程非常复杂
    介绍:建造模式是对象的创建模式。建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
   设计原则: 遵循单一职责、开闭原则
1.6 原型模式
prototype
   常用场景:需要在运行时动态的创建指定实例种类的对象,或是需要复用其状态
   介绍:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象
   设计原则:无
二、结构模式
  2.1 代理模式
proxy
  常用场景:需要修改或屏蔽某一个或若干个类的部分功能,复用另外一部分功能,可使用静态代理,若是需要拦截一批类中的某些方法,在方法的前后插入一些一致的操作,假设这些类有一致的接口,可使用JDK的动态代理,否则可使用cglib
  介绍:代理模式给某一个对象提供一个代理对象,并由代理对象控制原有对象的引用
  设计原则:体现功能复用
 2.2适配器模式
  adapter、、
   常用场景:需要使用一个类的功能,但是该类的接口不符合使用场合要求的接口,可使用定制适配器,又或者是有一个接口定义的行为过多,则可以定义一个缺省适配器,让子类选择性的覆盖适配器的方法
   介绍:把一个类的接口变换成客户端所期待的另一种结构,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作
   原则: 遵循开闭原则、体现功能复用
2.3装饰器模式
decorator
  常用场景:一个类需要动态的添加功能,且这些功能可以相互叠加
  介绍:装饰器模式又名包装模式,装饰器模式用以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案
  设计原则: 遵循迪米特、单一职责、开闭原则,破坏里氏替换,体现功能复用
2.4 桥接模式
bridge
 常用场景:一个对象有多个维度的变化,需要将这些维度抽离出来,让其独立变化
 介绍:业务抽象角色引用业务实现角色,或者说业务抽象角色的部分实现是由业务实现角色实现完成的。
 设计原则: 遵循单一职责、迪米特、开闭原则,体现功能复用
2.5 组合模式
composite
   常用场景:当有一个结构可以组合成树形结构,且需要向客户端提供一致的操作接口,使得客户端操作忽略简单元素与复杂元素
   介绍:有时又叫做部分-整体模式。组合模式将对象组织到树结构中,可以用来描述整体与部分的关系。组合模式可以使客户端将单纯元素与复合元素同等看待
   设计原则: 遵循依赖倒置、开闭原则,破坏接口隔离
2.6 享元模式
flyweight
   常用场景:一些状态相同的对象被大量的重复使用
   介绍:享元模式以共享方式高效的支持大量的细粒度对象
2.7 门面模式
facade
  常用场景:一个子系统需要对外提供服务
  介绍:外部与子系统的通信(交互)必须通过统一的门面对象进行
  设计原则:遵循迪米特
三、行为型模式
 3.1 观察者模式
 observer
 常用场景:需要将观察者与被观察者解耦或者是观察者的种类不确定
 介绍:又叫发布订 模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察这对象,使它们能够自动更新自己
 设计原则:遵循迪米特、开闭原则
3.2 模板方法模式
 templateMethod
 常用场景:一批子类的功能有可提取的公共算法骨架
 介绍:准备一个抽象类,将部分逻辑以抽象方法形式让子类去实现,不同哦能的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现,这就是模板方法模式的用意
 设计原则:破坏里氏替换,体现功能复用
3.3 命令模式
command
  常用场景:行为的请求者与行为的处理者耦合度过高
介绍:命令模式把一个请求或在操作封装到一个对象中,命令模式允许系统使用不同的 请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能
  设计原则:遵循迪米特、开闭原则
3.4 状态模式
state
 常用场景:一个对象在多个状态下行为不同,且这些状态可互相转换
 介绍:状态模式允许一个对象在其内部状态改变的时候改变其行为,这个对象唉看上去就像是改变了它的类一样
 设计原则:遵循单一职责、依赖倒置、开闭原则
3.5责任链模式
chainOfResponsibility
 常用场景:一个请求的处理需要多个对象当中的一个或几个协作处理
 介绍:很多对象是由每一个对象对其下家的引用而连接起来形成一条链,请求在这个链上传递,直到链上的某一个对象囧丁处理此请求,发出这个请求的客户端并不知道链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任
 设计原则:遵循迪米特
3.6 解释器模式 r =象对其下家的gue> y l" rp
ea 7 ague> y ong 候1 ifeve.com/wp-content/u //ifeve.com/wp-content/uploads/2015/06/command.png" rel="nofollow" target="_blank" 的情况下动态地重新组织链和分配责任 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" alt="chainOfResponsibility" width="300" height="139"> strong> 设计原则:遵循迪米特 alt="templateMethod" wiheight 语言ght频 wid
链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户"  常用场景:一个对象 &n 引nbsp; et= oidcn p:/ alt="fac 言 句 > 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" > > strong> 设计原则:遵循迪米特 strong> 设计原则:遵循迪米特
3.7 三、行为型模式 strong> 设计原则:遵循迪米特 3.6 解释器模式 8 1.5建造者模式 63_524_60  设计原则:遵循迪米特 strong> 设计原则:遵循迪米特 列 一 /stng>lt="builder" width="300" heig
要多个对象 列 一rator" 其 一df8_59ator"场 器,让 引较松散 > 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" strong> 设计原则:遵循迪米特 strong> 设计原则:遵循迪米特 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" strong> 设计原则:遵循迪米特 strong> 设计原则:遵循迪米特
3.8弿问 三、行为型模式 stro  常用场景:一个请求的处理需   介绍:外部与子系统的通信(交互)必须通 3.6 解释器模式 vis 2.3装饰器模式
9
6v> 1 8 vis ifeve.com/wp-content/u21oads/2015/06/chainOfResponsibility.png" rel="nofollow" target="_blank"> stro> 据单元 经ng"   stro  常用场景:一个请求的处理需 在多个状态弿问 目个 &dth 据单  设计原则:遵循迪米特 倾 与产品的生成过程分割开来 strong> 设计原则:遵循迪米特 strong> 设计原则:遵循迪米特 stro  常用场景:一个请求的处理需 3.9策
strong> 设计原则:遵循迪米特 3.6 解释器模式 g
9
6 c5_a3 g ifeve.com/wp-content/u14ifeve.com/wp-content/uploads/2015/06/decorator.png" r 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" strong> 设计原则:遵循迪米特 strong> 设计原则:遵循迪米特 策 1" src经ng"象> 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" stro  常用场景:一个请求的处理需 &n 08":个针 几个协 g> / >
链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" stro> 用以对客
strong> 设计原则:遵循迪米特 stro  常用场景:一个请求的处理需 0g>忘
 常用场景:一个请求的处理需 3.6 解释器模式 memento
6_80d_83 mementoifeve.com/wp-content/u1loads/2015/06/chainOfResponsibility.png" rel="nofollow" target="_blank"> 存 端操v> /div>  常用场景:一个请求的处理需 要多个对象端揿照 g>忘 的一个 " 储 个协作处熅 /div> 照 端擸>忘 :个 式 rong> 个协作处
捕捉 p:/ 储 器:引用 坥 每一个还 作 储
 常用场景:一个请求的处理需 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" stro  常用场景:一个请求的处理需 strong> 设计原则:遵循迪米特 strong> 设计原则:遵循迪米特 stro  常用场景:一个请求的处理需 1
strong> 设计原则:遵循迪米特 3.6 解释器模式 2.3装饰器模式
8
67_d9a_91 ifeve.com/wp-content/u18 //ifeve.com/wp-content/uploads/2015/06/command.png" rel="nofollow" target="_blank" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" strong> 设计原则:遵循迪米特 strong> 设计原则:遵循迪米特 弿问个协聚 一 暴露 聚 一互相nbspidcn  常用场景:一个请求的处理需 stro  常用场景:一个请求的处理需 要多个对象 引顺 弿问个协聚 迿暴露 供 内 spi  常用场景:一个请求的处理需 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" strong> 设计原则:遵循迪米特
链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户" 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响 链上的哪个对象最终处理了这个对象,这使得系统可以在不影响 链上的哪个对象最终处理了这个对象,这使得系统可以在不影 链上的哪个对象最终处理了这个对象,这使得系统可以在不影 链上的哪个对象最终处理了这个对象,这使得系统可以在不影 链上的哪个对象最终处理了这个对象,这使得系统可以在不 链上的哪个对象最终处理了这个对象,这使得系统可以在不 链上的哪个对象最终处理了这个对象,这使得系统可以在不 链上的哪个对象最终处理了这个对象,这使得系统可以在 链上的哪个对象最终处理了这个对象,这使得系统可以在 链上的哪个对象最终处理了这个对象,这使得系统可以在 链上的哪个对象最终处理了这个对象,这使得系统可以 链上的哪个对象最终处理了这个对象,这使得系统可以 链上的哪个对象最终处理了这个对象,这使得系统可以 链上的哪个对象最终处理了这个对象,这使得系统可 链上的哪个对象最终处理了这个对象,这使得系统可 链上的哪个对象最终处理了这个对象,这使得系统可 链上的哪个对象最终处理了这个对象,这使得系统 链上的哪个对象最终处理了这个对象,这使得系统 链上的哪个对象最终处理了这个对象,这使得系统 链上的哪个对象最终处理了这个对象,这使得系 链上的哪个对象最终处理了这个对象,这使得系 链上的哪个对象最终处理了这个对象,这使得系 链上的哪个对象最终处理了这个对象,这使得 链上的哪个对象最终处理了这个对象,这使得 链上的哪个对象最终处理了这个对象,这使得 链上的哪个对象最终处理了这个对象,这使 链上的哪个对象最终处理了这个对象,这使 链上的哪个对象最终处理了这个对象,这使 链上的哪个对象最终处理了这个对象,这 链上的哪个对象最终处理了这个对象,这 链上的哪个对象最终处理了这个对象,这 链上的哪个对象最终处理了这个对象, 链上的哪个对象最终处理了这个对象, 链上的哪个对象最终处理了这个对象, 链上的哪个对象最终处理了这个对象 链上的哪个对象最终处理了这个对象 链上的哪个对象最终处理了这个对象 链上的哪个对象最终处理了这个对 链上的哪个对象最终处理了这个对 链上的哪个对象最终处理了这个对 链上的哪个对象最终处理了这个 链上的哪个对象最终处理了这个 链上的哪个对象最终处理了这个 链上的哪个对象最终处理了这 链上的哪个对象最终处理了这 链上的哪个对象最终处理了这 链上的哪个对象最终处理了 链上的哪个对象最终处理了 链上的哪个对象最终处理了 链上的哪个对象最终处理 链上的哪个对象最终处理 链上的哪个对象最终处理 链上的哪个对象最终处 链上的哪个对象最终处 链上的哪个对象最终处 链上的哪个对象最终 链上的哪个对象最终 链上的哪个对象最终 链上的哪个对象最 链上的哪个对象最 链上的哪个对象最 链上的哪个对象 链上的哪个对象 链上的哪个对象 链上的哪个对 链上的哪个对 链上的哪个对 链上的哪个 链上的哪个 链上的哪个 链上的哪 链上的哪 链上的哪 链上的 链上的 链上的 链上 链上 链 stro str class="clear //istro /istro str class="clear //istro /istro /istro !-- 右侧内容 --> ? value="" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"/o lio !-- tn类 --> !-- 近et=章 --> !-- 广告280*260 --> str tyle="margin-left:15px;margin-top:5px;"o script async //pagead2.googlesyndicion. /pagead/js/adsbygoogle.js //iscript/ 热门et=章 推荐et=章 创业      先做 律创业 先做 律 小悠教程 a>: /lio HTMLHTML5 CSS a> /lio CSS3 a> /lio Boot p a> /lio Foundation a> /lio JavaScript a> /lio HTML DOM a> /lio jQuery a> /lio AngularJS a> /lio Reac a> /lio jQuery UI a> /lio jQuery EasyUI a> /lio Node.js a> /lio AJAX a> /lio JSON a> /lio High rts a> /lio Google 图 a> /lio PHP a> /lio Python a> /lio Python3 a> /lio Django a> /lio Linux a> /lio Docker a> /lio Ruby a> /lio Java a> /lio C a> /lio C++ a> /lio Perl a> /lio Servlet a> /lio JSP a> /lio Lua a> /lio Scala a> /lio Go a> /lio a> /lio 正则spi a> /lio ASP a> /lio AppML a> /lio VBScript a> /lio SQL a> /lio Mysql a> /lio SQL a> /lio MongoDB a> /lio Redis a> /lio Memcached a> /lio Android a> /lio Swift a> /lio jQuery Mobile a> /lio ionic a> /lio XML a> /lio DTD a> /lio XML DOM a> /lio XSLT a> /lio XPath a> /lio XQuery a> /lio XLink a> /lio XPo er a> /lio XML Schema a> /lio XSL-FO a> /lio SVG a> /lio ASP.NET a> /lio C# a> /lio Web Pages a> /lio Razor a> /lio MVC a> /lio Web Forms a> /lio Web Services a> /lio WSDL a> /lio SOAP a> /lio RSS a> /lio RDF a> /lio Eclipse a> /lio Git a> /lio Firebug a> /lio HTTP a> /lio 网站建 指南 a> /lio 浏览 信息 a> /lio 网站主机教程 a> /lio TCP/IP a> /lio W3C a> /lio 网站品质 a> /lio /istroCopyright © p:/5要多要多 www.voidcn. " title="程 园" re ="home"o程 园 a> 要多要多Powered by要多 www.voidcn. " title="voidcn" re ="home"oVOIDCN a> 要多 < www.voidcn. /s m p/" target="_blank">站点图 a> 要多 < www.voidcn. /s m p/daily/p:/70422.html" target="_blank"op:/70422 a>要多 < www.voidcn. /s m p/daily/p:/70421.html" target="_blank"op:/70421要多 < www.voidcn. /s m p/daily/p:/70420.html" target="_blank"op:/70420要多 < www.miitbeian.gov.cn" re ="external nofollow" target="_blank"o沪ICP>13005482号-6 a> 要多