部分设计模式对比分析

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

桥接模式类图

装饰者模式类图

  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)代理模式:代理器和被代理者都继承自同一接口,只是使用中客户访问不到被代理者,所以利用代理间接的访问

续...

原文地址:https://www.cnblogs.com/lemonyam/p/11639166.html

时间: 2024-08-06 23:08:48

部分设计模式对比分析的相关文章

GitHub & Bitbucket & GitLab & Coding 的对比分析

来源于:https://www.v2ex.com/t/313263 目前在代码托管和版本控制上的主流工具 — Git ,比较流行的服务有 Github . Bitbucket . GitLab . Coding ,他们各自有什么特点,个人使用者和开发团队又该如何选择? 在这篇文章中,我们以客观的态度,以问题作为出发点,介绍和比较 GitHub . Bitbucket . GitLab . Coding 在基本功能,开源与协作,免费与付费计划,企业解决方案,集成 flow.ci 等方面,让大家了解

(转)netty、mina性能对比分析

转自: http://blog.csdn.net/mindfloating/article/details/8622930 流行 NIO Framework netty 和 mina 性能测评与分析 测试方法 采用 mina 和 netty 各实现一个 基于 nio 的EchoServer,测试在不同大小网络报文下的性能表现 测试环境 客户端-服务端: model name: Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz cache size: 6144 KB

移动三大平台和三大开发模式对比分析

一:移动三大平台及其对比分析: 1)移动三大平台 2)移动三大平台对比分析 二:三大开发模式及其对比分析: 1)三大开发模式 2)三大开发模式对比分析 移动三大平台和三大开发模式对比分析,布布扣,bubuko.com

DICOM:DICOM三大开源库对比分析之“数据加载”

背景: 上一篇博文DICOM:DICOM万能编辑工具之Sante DICOM Editor介绍了DICOM万能编辑工具,在日常使用过程中发现,"只要Sante DICOM Editor打不开的数据,基本可以判定此DICOM文件格式错误(准确率达99.9999%^_^)".在感叹Sante DICOM Editor神器牛掰的同时,想了解一下其底层是如何实现的.通过日常使用以及阅读软件帮助手册推断其底层依赖库很可能是dcmtk,就如同本人使用dcmtk.fo-dicom.dcm4che3等

23种设计模式对比与总结

设计模式总结:便于快速查看 前言:个人觉得设计模式就是各个对象在不同的时机.不同的调用方被创建,组合结构和封装的侧重点有些不同,从而形成了各个模式的概念. 1.      简单工厂模式 通过在工厂类中进行判断,然后创建需要的功能类. 优点:不必使用具体的功能类去创建该类的实例.缺点:新增一个功能类就需要在工厂类中增加一个判断. 2.      策略模式 假设一个功能类是一个策略,调用的时候需要创建这个策略的实例,传进一个类似策略控制中心的方法中,然后通过策略基类调用这个传进去的实例子类的方法.

Java中的NIO和IO的对比分析

总的来说,java中的IO和NIO主要有三点区别: IO                  NIO 面向流     面向缓冲 阻塞IO  非阻塞IO  无   选择器(Selectors) 1.面向流与面向缓冲 Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的. Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方.此外,它不能前后移动流中的数据.如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区. Java

QQ视频与webrtc打洞对比分析

工作后的第一篇博客,mark一下. 一.NAT 1. 含义 NAT技术(Network Address Translation,网络地址转换)是一种把内部网络(简称为内网)私有IP地址转换为外部网络(简称为外网)公共IP地址的技术,它使得一定范围内的多台主机只利用一个公共IP地址连接到外网,可以在很大程度上缓解了公网IP地址紧缺的问题. 2. 实现方式 静态转换.动态转换.端口多路复用. 静态转换:是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的.通过静态配置,

申论作答攻略:对比分析题作答技巧

在申论考试中,对比分析题是相对较难的题型之一,考生在这一题型上往往失分严重. 1.关系对比分析: 整体表明对象间的关系--深入分析对象间的关系.如让考生分析A和B之间的关系,思路如下:先找出A和B的整体关系,继而在具体分析A和B之间的关系,若是让考生分析A.B.C之间的关系,那么思路为:先找出三者的整体关系,之后再分别比较:A与B.C的关系;B与A. C的关系;C与A.B的关系. 2.异同点对比分析: 概括几个对象的做法--对比罗列出相同点--对比罗列不同点.如让考生分析A和B的异同,思路将是:

常用hash函数对比分析(一)

主要目标:寻找一个hash函数,高效的支持64位整数运算,使得在速度.空间等效率相对其它函数函数较高,以及内部运算时32位整数运算. 测试了"RSHash","JSHash","PJWHash","ELFHash","BKDRHash","SDBMHash","DJBHash","DEKHash","BPHash","