设计模式的区别

简单代理模式与策略模式在功能上的很大的区别是:

简单代理模式中,代理类知道被代理类的行为,由于代理类与被代理类实现的是同一个接口,所以代理类与被代理类的结构是相同的;算法

而策略模式中,策略容器并不知道内部策略的详细信息,由于容器并无实现与内部策略相同的接口,即容器与内部策略只是简单的组合关系,容器只是将内部策略的行为抽取出来,进行了统一的实现。策略模式仅仅封装算法(包括添加 & 删除),但策略模式并不决定在什么时候使用何种算法,算法的选择由客户端来决定。数据库

 

策略模式vs工厂模式的区别:

策略模式定义了一系列的算法,并将每个算法封装起来,并且使它们还能够相互替换。设计模式

策略模式让算法独立于使用它的客户而独立变化。架构

在软件开发中也经常遇到相似的状况,实现某一个功能有多种算法或者策略,咱们能够根据环境或者条件的不一样选择不一样的算法或者策略来完成该功能。如查找、排序等,一种经常使用的方法是硬编码(Hard Coding)在一个类中,如须要提供多种查找算法,能够将这些算法写到一个类中,在该类中提供多个方法,每个方法对应一个具体的查找算法;固然也能够将这些查找算法封装在一个统一的方法中,经过if…else…或者case等条件判断语句来进行选择。这两种实现方法咱们均可以称之为硬编码,若是须要增长一种新的查找算法,须要修改封装算法类的源代码;更换查找算法,也须要修改客户端调用代码。在这个算法类中封装了大量查找算法,该类代码将较复杂,维护较为困难。若是咱们将这些策略包含在客户端,这种作法更不可取,将致使客户端程序庞大并且难以维护,若是存在大量可供选择的算法时问题将变得更加严重。post

 

1. 类似:编码

    在模式结构上,二者很类似;spa

2.差异:设计

  • 用途不同 

  • 工厂是建立型模式,它的做用就是建立对象; 

  • 策略是行为型模式,它的做用是让一个对象在许多行为中选择一种行为;
    • 关注点不同 代理


    • 一个关注对象建立 对象


    • 一个关注行为的封装

    • 解决不一样的问题 


    • 工厂模式是建立型的设计模式,它接受指令,建立出符合要求的实例;它主要解决的是资源的统一分发,将对象的建立彻底独立出来,让对象的建立和具体的使用客户无关。主要应用在多数据库选择,类库文件加载等。

    •  
      策略模式是为了解决的是策略的切换与扩展,更简洁的说是定义策略族,分别封装起来,让他们之间能够相互替换,策略模式让策略的变化独立于使用策略的客户。

    • 工厂至关于黑盒子,策略至关于白盒子;

适配器模式,装饰模式,代理模式异同:

1、概念

适配器模式,容许由于接口不兼容而不能在一块儿工做的类工做在一块儿,作法是将类本身的接口包裹在一个已存在的类中。
装饰器模式,原有的不能知足现有的需求,对原有的进行加强。
代理模式,同一个类而去调用另外一个类的方法,不对这个方法进行直接操做。

适配器的特色在于兼容,从代码上的特色来讲,适配类与原有的类具备相同的接口,而且持有新的目标对象。就如同一个三孔转2孔的适配器同样,他有三孔的插头,能够插到三孔插座里,又有两孔的插座能够被2孔插头插入。适配器模式是在于对原有3孔的改造。在使用适配器模式的时候,咱们必须同时持有原对象,适配对象,目标对象。。。。

装饰器模式特色在于加强,他的特色是被装饰类和全部的装饰类必须实现同一个接口,并且必须持有被装饰的对象,能够无限装饰。

代理模式的特色在于隔离,隔离调用类和被调用类的关系,经过一个代理类去调用。

总的来讲就是以下三句话:

  • 适配器模式是将一个类(a)经过某种方式转换成另外一个类(b).
  • 装饰模式是在一个原有类(a)的基础之上增长了某些新的功能变成另外一个类(b).
  • 代理模式是将一个类(a)转换成具体的操做类(b).

在装饰器模式中,必需要有被装饰的类和装饰的类。。在这套代码中,原先SourceOrderApi的对象就是被装饰的类,而新建NewSourceOrderApiImpl 就是装饰类,装饰类必须把被装饰的对象看成参数传入。

这就是和代理模式的代码不一样之处,代理模式必定是自身持有这个对象,不须要从外部传入。而装饰模式的必定是从外部传入,而且能够没有顺序,按照代码的实际需求随意挑换顺序,就如你吃火锅先放白菜仍是先放丸子均可以。

再从使用上来看,代理模式注重的是隔离限制,让外部不能访问你实际的调用对象,好比权限控制,装饰模式注重的是功能的拓展,在同一个方法下实现更多的功能。

 

 

建造者模式和抽象工厂模式的区别:

相对来讲,抽象工厂模式比建造者模式的尺度要大,它关注产品总体,而建造者模式关注构建过程,所以建造者模式能够很容易地构建出一个崭新的产品,只要导演类可以提供具体的工艺流程。也正由于如此,二者的应用场景大相径庭,若是但愿屏蔽对象的建立过程,只提供一个封装良好的对象,则能够选择抽象工厂方法模式。而建造者模式能够用在构件的装配方面,如经过装配不一样的组件或者相同组件的不一样顺序,能够产生出一个新的对象,它能够产生一个很是灵活的架构,方便地扩展和维护系统。

状态模式和策略模式的区别:

  它们的UML图是同样的,但意图却彻底不同,策略模式是让用户指定更换的策略算法,而状态模式是状态在知足必定条件下的自动更换,用户没法指定状态,最多只能设置初始状态。

相关文章
相关标签/搜索