设计模式总结-比较篇.docx_第1页
设计模式总结-比较篇.docx_第2页
设计模式总结-比较篇.docx_第3页
设计模式总结-比较篇.docx_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

注:文档内容基本上来自于网上,并加上自己的理解而成。有的觉得网友总结得非常好,就完全照搬下来,供学习之用。然而,有的摘抄并没有加上原链接和出处,请谅解。在设计比较设计模式的不同时,主要从以下几个方面思考:1. 各个设计模式的主要解决的问题和主要目的是什么?2. 各个设计模式之间并不是非此即彼的,他们之间有些有着很大的相似性。并且有的可以相互替代3. UML图和实现时的细节区别简单工厂模式和策略模式的区别简单工厂模式和策略模式的理解相同之处:1.它们都有一个抽象类或公共接口,并且在抽象类或者接口中,定义一个方法(或虚拟抽象方法);2.通过子类进行继承父类或者实现接口方法。3.使用多态特性,进行实例方法调用,调用的是子类的方法;区别之处:1.简单工厂模式 强调的是创建类对象,根据 字符串类型参数传入参数,进行实例化;2.简单工厂模式,必须定义一个制造实例的工厂类Factory,且其工厂类,返回父类类型,不是子类类型;4.策略模式强调的算法封装,而算法的不同,增加相应的子类进行实现。必须有一个Content类,提供两个方法,一个接受各个算法的实例对象(比如Set方法),一个是对子类方法的封装,提供访问客户端统一的接口(这里说的接口是访问Content的接口,比如Action?)。 5.策略模式中接受算法实例的方法,可以结合简单工厂模式,传入字符串参数,内部进行实例化,降低和客户端的耦合。桥接模式与策略者模式分析解释一:桥接模式在于分离了实现和抽象,它将其分别放到了两个不同的类层次.golf说在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。 从上图看到了两个变化维度,一个就是implementor,一个是abstraction,前者是实现后者是抽象,那说明实现和抽象两方面都可能变化。abstraction可能派生出不同的RefinedAbstraction,而Implementor也有不同的实际implementor. 那么这个桥就是连接两个变化维度的,RefinedAbstraction和ConcreteImplemetorA之间是通过Abstraction和Implementor发生联系,而他们两个之间本身确实松散的关系,而Abstracion聚合了几个Implementor,那Abstraction即依赖了Implementor,而最终Abstraction试图基于implementor提供的基本操作又定义了更高层次的接口,比如Operation(),它们使用了implemntor提供的抽象接口,委托于具体来实现。而本身abstracion的高层接口也进行了派生。所以说有两个变化维度。 类似的策略者模式:区别1:bridge为构造模式,strategy为行为模式。区别2:在策略模式中,并不考虑Context的变化,只有算法的可替代性,而bridge具有两个维度的变化。区别3:桥接模式强调Implementor接口仅提供基本操作,而Abstraction则基于这些基本操作定义更高层次的操作。而策略模式强调Strategy抽象接口的提供的是一种算法,一般是无状态、无数据的,而Context则简单调用这些算法完成其操作。解释二:桥接(Bridge)模式是结构型模式的一种,而策略(strategy)模式则属于行为模式。以下是它们的UML结构图。在桥接模式中,Abstraction通过聚合的方式引用Implementor。在策略模式中,Context也使用聚合的方式引用Startegy抽象接口。从他们的结构图可知,在这两种模式中,都存在一个对象使用聚合的方式引用另一个对象的抽象接口的情况,而且该抽象接口的实现可以有多种并且可以替换。可以说两者在表象上都是调用者与被调用者之间的解耦,以及抽象接口与实现的分离。那么两者的区别体现在什么地方呢?1. 首先,在形式上,两者还是有一定区别的,对比两幅结构图,我们可以发现,在桥接模式中不仅Implementor具有变化(ConcreateImplementior),而且Abstraction也可以发生变化(RefinedAbstraction),而且两者的变化是完全独立的,RefinedAbstraction与ConcreateImplementior之间松散耦合,它们仅仅通过Abstraction与Implementor之间的关系联系起来。而在策略模式中,并不考虑Context的变化,只有算法的可替代性。2.其次在语意上,桥接模式强调Implementor接口仅提供基本操作,而Abstraction则基于这些基本操作定义更高层次的操作(注:这是因为Implementor即实现嘛,肯定提供的是一些基本的操作;而Abstraction则是抽像,抽像肯定是更加一个层次的操作)。而策略模式强调Strategy抽象接口的提供的是一种算法,一般是无状态、无数据的,而Context则简单调用这些算法完成其操作。3.桥接模式中不仅定义Implementor的接口而且定义Abstraction的接口,Abstraction的接口不仅仅是为了与Implementor通信而存在的,这也反映了结构型模式的特点:通过继承、聚合的方式组合类和对象以形成更大的结构。在策略模式中,Startegy和Context的接口都是两者之间的协作接口,并不涉及到其它的功能接口,所以它是行为模式的一种。行为模式的主要特点就是处理的是对象之间的通信方式,往往是通过引入中介者对象将通信双方解耦,在这里实际上就是将Context与实际的算法提供者解耦。所以相对策略模式,桥接模式要表达的内容要更多,结构也更加复杂。桥接模式表达的主要意义其实是接口隔离的原则,即把本质上并不内聚的两种体系区别开来,使得它们可以松散的组合,而策略在解耦上还仅仅是某一个算法的层次,没有到体系这一层次。从结构图中可以看到,策略的结构是包容在桥接结构中的,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论