部分设计模式对比分析

桥接模式与装饰者模式区别:

桥接模式类图

装饰者模式类图

  1、定义:

    (1)桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化

    (2)装饰者模式:动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活

  2、“独立部分”不同:

    (1)桥接模式:抽象类和实现接口类是相互独立的,降低了类之间的耦合度

    (2)装饰者模式:具体构件以及抽象装饰类都继承自抽象构件,所以仍是紧耦合

  3、角度不同:

    (1)桥接模式:对象自身有沿着多个维度变化的趋势, 本身不稳定

    (2)装饰者模式:对象自身比较稳定, 只是为了增加新功能或增强原功能

  4、适用环境:

    (1)桥接模式:

      A、当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展

      B、当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加

      C、当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性

    (2)装饰者模式:

      A、在不影响其他对象的情况下,以动态、透明的方式给单个对象添加附加职责

      B、当不能采用继承的方式对系统进行扩充或者采用继承不利于系统扩展和维护时

      C、需要动态地给一个对象增加功能,这些功能也可以动态地被撤销

注:桥接模式和装饰者模式祥见https://www.cnblogs.com/lemonyam/p/11618818.html

  https://www.cnblogs.com/lemonyam/p/11621151.html

工厂方法模式与抽象工厂模式区别:

工厂方法模式类图

抽象工厂模式类图

  1、定义:

    (1)工厂方法模式:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中

    (2)抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类

  2、针对对象:

    (1)工厂方法模式:产品等级结构

    (2)抽象工厂模式:产品族

  3、产品:

    (1)工厂方法模式:一个抽象产品,可派生出多个具体产品

    (2)抽象工厂模式:多个抽象产品,每个抽象产品又能派生出多个具体产品

  4、工厂:

    (1)工厂方法模式:一个抽象工厂,可派生出多个具体工厂,每个具体工厂只能创建出一个具体产品类

    (2)抽象工厂模式:一个抽象工厂,可派生出多个具体工厂,每个具体工厂可创建出多个具体产品类

注:工厂方法模式和抽象工厂模式详见https://www.cnblogs.com/lemonyam/p/11617480.html

单例模式:

单例模式类图

  1、定义:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类

  2、要点:

    (1)单例类的构造函数为私有,防止类外部实例化

    (2)提供一个自身的静态私有成员变量,将该类实例赋值给它

    (3)提供一个公有的静态工厂方法,返回该静态私有成员变量

注:由于类外部无法实例化对象,需要通过类名来返回对象,所以需要使用静态方法来返回;

  而静态域加载是在解析阶段,所以需要使用一个静态成员以供静态方法调用

  3、扩展:多例模式 ==> 可通过一个数组来储存多个对象,在需要时从数组中获取

  4、线程相关:多线程编程语言中,单例模式会涉及同步锁的问题。而 JavaScript 是单线程的,暂可忽略该问题

注:Typescript 是 Javascript 的超集,通过编译后会转换为 Javascript

  单例模式详见https://www.cnblogs.com/lemonyam/p/11617344.html

适配器模式与代理模式区别:

(类)适配器模式类图

代理模式类图

  1、定义:

    (1)适配器模式:将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作

    (2)代理模式:给某一个对象提供一个代理,并由代理对象控制对原对象的引用

  2、针对内容:这两种模式都实现了一个类到另一个类之间的中转

    (1)适配器模式:适配器和适配者接口不同,为了调用不同的接口而实现转换

    (2)代理模式:代理器和被代理者都继承自同一接口,只是使用中客户访问不到被代理者,所以利用代理间接的访问

 

续...

猜你喜欢

转载自www.cnblogs.com/lemonyam/p/11639166.html