23种基本设计模式-概述

1、为什么使用?设计模式,能够使代码更简洁、更优美、更效率、扩展性型更强。

2、设计模式的原则:开闭原则(对拓展开放,对改动关闭)(抽象化是关键)

--单一职责原则:类的职责应该单一(不存在多种原因导致类的变更),否则类应该被拆分。(没理解透)

--里氏替换原则:不论什么基类能够出现的地方,子类一定能够出现。

(LSP)(该规范中子类尽可能不要重写或重载基类的方法)(面向对象设计的基本原则之中的一个)(开闭原则的补充)(抽象化的详细实现)

--依赖反转原则:依赖于抽象。不依赖于详细。(编程是须要依赖详细的类时,不与该类交互,而转向与该类的上层接口交互)(面向接口)(开闭原则的基础)

--接口隔离原则:每一个接口,对于实现该接口的类,不存在冗余的方法。否则需拆分接口。(使用多个隔离接口。要优于一个集合接口)

--最少知道原则:类对于自己依赖的类知道的越少越好。(迪米特法则)(不管依赖的类的逻辑多么复杂,子类仅仅须要通过逻辑被封装的暴露的方法去使用就可以)(该原则保证依赖的类改变是。对继承他的类影响最小)(仅仅与直接朋友通信)(朋友关系:类之间存在耦合[依赖,关联,聚合。组合])(直接朋友:作为成员变量,方法參数,方法返回值的类)(陌生类不要出如今局部变量中)

--合成复用原则:合成/聚合优于继承。

3、模式应用场景

----结构模式

--适配器模式(Adapter):已有接口和定义接口不匹配。

(类的适配器模式和对象的适配器模式)

实现描写叙述:

类适配(原始类A有一方法funcA。接口faceA须要实现funcA、funcB,实现一个适配类B继承与A实现接口faceA)(解决接口内方法个数和原始类方法不匹配)

对象适配(将类适配中A和B的关系从继承,改变为B持有A的实例对象)(解决原始类方法和已有接口方法的命名不匹配和个数不匹配)

接口适配(桩问题)

对于接口,引申出两个概念:标识接口(没有声明不论什么方法的接口)和桩(实现了接口,可是实现方法体为空的类)。

标识接口:用来标识某个类符合一定的规范。

(对于有人制定规则的前提下,这样的标识非常实用。怎样不遵守这样的规范。随意去实现自己的代码,将会给程序带来致命的错误)

桩:在一个接口里声明的一组方法。有的时候某些方法可能被忽略运行,或者返回值没有不论什么意义,能够定义一个桩,让详细的实现延迟到详细的子类。

(没理解透)

--装饰模式(Decorator):扩展一个类功能。

(动态的加入功能)

实现描写叙述:原始类A定义有方法funcA。定义接口faceA有方法funcA,定义装饰类B持有A的实例对象、实现接口faceA。(旨在对原始类的扩展)

--代理模式(Proxy):取代原对象进行一系列操作。

(对象的訪问控制)(隐藏一个对象的详细信息)

实现描写叙述:原始类A定义有方法funcA,定义接口faceA有方法funcA,定义装饰类B持有A的实例对象、实现接口faceA,客户程序通过接口faceA去调用A的funcA。

(旨在封装原始类的复杂接口)

--外观模式(Facade):各组件类解耦,形成一个外观提供服务。(计算机类和各个组件类,为了防止各个组件之间的耦合,用计算机类持有各个组件的实例。避免了组件之间的关联)

实现描写叙述:原始类A、B、C。定义外观类D持有A、B、C的实例对象。(旨在对A、B、C关系的解耦)

--桥接模式(Bridge):抽象化和实例化的解耦。

实现描写叙述:定义接口faceA含funcA,定义桥接类A持有接口faceA的一个对象并实现funcA,funcA会依据一定的逻辑调用faceA的funcA,使实现接口faceA的各个类详细的逻辑实现和 接口的调用逻辑分离。客户程序调用A的方法funcA就能够调用对应的处理逻辑。

--组合模式(Composite):客户程序和复杂元素的内部结构解耦。(树节点和树)(部分总体模式)(像操作简单元素一样操作复杂元素)

实现描写叙述:将复杂的组织结构以树的形式实现,简化对复杂数据结构的操作(汗)(没理解透)

--享元模式(Flyweight):已存在对象的共享。(共享池)(连接池)(没理解透)

实现描写叙述:管理类持有实例对象的列表并管理这个列表,对外以工厂的模式提供对象。

-------简单工厂模式(扩)

--简单创建:一个工厂类负责对实现的同一接口的一些类进行实例的创建。(传递相关类型名字符串来区分创建的类)

--个性化创建:在简单的基础上。工厂类对每一个类实现一个创建方法。(个性化)(多个方法)

--静态个性化创建:在个性化创建的基础上。工厂类的方法设置为类的静态方法(static)。

(多个静态方法)

----创建模式

--工厂方法模式(Factory Method):解决简单工厂模式在扩展的时候必须改动工厂类、违背开闭原则。

(简单工厂模式类的创建依赖于工厂类)(扩展性好)(支持新增产品)

实现描写叙述:定义一个工厂类接口。对每一个产品类创建一个工厂类。

--抽象工厂模式(Abstract Factory):对产品簇的扩展支持(不支持新增产品,可新增产品簇)

实现模式:定义一个工厂类接口,多个产品抽象接口。(产品簇)

--单例模式(Singleton):提供唯一对象(创建对象过多时)(减压)(对象仅仅能唯一)

实现模式:内部类生成private static 对象。通过public static方法对外提供(内部类实现)

--建造者模式(Builder):创建一个复杂对象,使创建流程和发杂对象各部分的详细创建过程分离。

实现模式:定义一个建造者接口Builder,一个导演类Director持有建造者Builder接口,通过该接口调用详细建造者ConcreteBuilder类中的方法。从而构造出复杂的Product对象。

--原型模式(Prototype):对象的克隆。(本地方法。比new更效率)(简化对象的创建)(浅拷贝:数组、引用对象)(深拷贝:原始类型和包装类型、String)(越过类的构造函数权限进行克隆)(与单例模式冲突)

--实现模式:重写Object类的clone方法。(Cloneable接口。数组、引用对象须要单独实现克隆)

----关系模式

-父类与子类

--策略模式(Strategy):让可互换算法的详细变化不影响到调用的client程序。(决定权在client程序)(由客户决定详细调用的算法)(客户程序不须要知道算法的详细变化和所须要的数据)

实现模式:一个抽象的算法接口,一个可有可无的提供辅助函数的抽象类。一群实现接口、继承抽象类的算法类,一个须要相关算法的client程序。

--模板方法模式(Template Method):算法公用部分放到父类,不同部分延迟到子类实现。(父类引用调子类方法)(没理解透)

实现模式:一个提供主方法的抽象类。一群继承抽象类的算法类,一个须要通过抽象类的引用调用详细方法的client程序。

-类之间

--观察者模式(Observer):两类接口存在依赖。

(一方影响还有一方)(一方监控还有一方)

实现模式:一接口A依赖于还有一个接口B,接口A的实现的变化影响B的实现(一个抽象类和他的子类),接口B的实现须要去监控A的动态并做出反应。

--迭代器模式(Iterator):聚合的遍历。

实现模式:聚合接口和迭代器接口,迭代器接口的实现持有聚合接口的引用,从而操作集体的聚合类型。

--责任链模式(Chain Of Responsibility):多个对象互相引用。(对用户程序隐藏详细调用的对象)

实现模式:一个类B继承于抽象类A、实现了接口funA,A持有funA的引用、能够去引用B的实例对象。客户程序通过B的实例对象调用对应操作。

--命令模式(Command):命令者和受令者的解耦。

实现模式:命令接口F。实现接口的命令类C,C持有终于完毕命令的类R的引用,调用类I持有命令接口的引用。

-类的状态

--备忘录模式(Memento):备份对象状态。以便恢复。

实现模式:一个原始类A能够创建备忘录类B,存储类C持有B的实例用来存储备忘录。

--状态模式(State):状态不同。行为不同。

实现模式:原始类A持有状态类B的实例。A依据B的属性值去调用B的对应的详细方法。

-BY中间类

--訪问者模式(Visitor):解决和元素类关系不大且频繁变动的操作的改变问题(来訪问我吧)(扩展性:接收不同的訪问者,操作的扩展)(符合单一职责)(外界调用元素接口引用)

实现模式:一个元素接口,一个訪问者接口,元素接口接收訪问者接口从而让其进行一些相关操作。

--中介者模式(Mediator):工作有关的工作者类之间的解耦。

实现模式:一个中介者接口,实现接口的中介者类,该类持有N个工作者类对象,并协调他们进行工作,抽象工作者类持有与之对应的中介者接口引用。(外界调用中介者接口引用)

--解释器模式(Interpreter):解释相关表达式。

(扩展性好)(影响效率、性能,维护性复杂)(不建议轻易使用)(单一问题频度非常大。能够考虑)

实现模式:表达式接口(非终结符表达式类和终结符表达式类),一个上下文环境Context类。(没理解透)

原文地址:https://www.cnblogs.com/zhchoutai/p/8365492.html

时间: 2024-10-03 15:48:20

23种基本设计模式-概述的相关文章

简述23种软件设计模式

简述23种软件设计模式 一.设计模式分类 总体来说设计模式分为三大类: 五种创建型模式:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 七种结构型模式:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 十一种行为型模式:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 二.设计模式概述 创建型模式 1.工厂方法模式 工厂方法模式的创建是因为简单工厂模式有一个问题,在简单工厂模式

23种软件设计模式

23种软件设计模式  本人是三本计科专业的学生,过了19年上半年的中级软件设计师,在辅导书上接触到23种软件设计模式的概念与作用.如果单纯的只是想把软设过了就只需要了解创建型模式,结构型模式,行为型模式分别有哪些设计模式,还要牢记每个设计模式的定义.本人有19年软件设计师最新的资料,有需要可自行下载. 参考:http://c.biancheng.net/view/1320.html 链接:https://pan.baidu.com/s/15bY8mUvIchPuCdPQUE6OSw    提取码

23种JavaScript设计模式

原文链接:https://boostlog.io/@sonuton/23-javascript-design-patterns-5adb006847018500491f3f7f 转自: https://mp.weixin.qq.com/s?__biz=MzUxMzcxMzE5Ng==&mid=2247488996&idx=1&sn=c337e4cfe2a67550f5f22536d58a9735&chksm=f951a0a7ce2629b13bb306f9a2410e2be

23种GoF设计模式的分类

GoF设计模式一共有23个.一般可以按目的和作用范围来进行划分,具体划分方法如下: 第一,这些模式按目的(即完成什么样任务)来划分为创建型.结构型和行为型这三种模式: 创建型:用来创建对象.单例.原型.抽象工厂.建造者.工厂方法这五个都属于这一分类.这种类别起到了将对象的创建与其使用进行分离解耦. 结构型:用来处理类或对象之间如何组合以构成更大的结构体.桥接.装饰.适配器.代理.外观.享元.组合这七个属于这一类. 行为型:用来处理类或对象之间如何交互和分配职责.模板方法.解释器.策略.命令.职责

23种Java设计模式

1.FACTORY——追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了.麦当劳和肯德基就是生产鸡翅的Factory 工厂模式:客户类和工厂类分开.消费者任何时候需要某种产品,只需向工厂请求即可.消费者无须修改就可以接纳新产品.缺点是当产品修改时,工厂类也要做相应的修改.如:如何创建及如何向客户端提供. 2.BUILDER——MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的

简谈java的23种基本设计模式

设计模式(design pattern),就是设计(design)程序时候可以拿来稍微改改就解决问题的模式(pattern). 虽然看着挺多的,但等仔细琢磨后抓住各种设计模式的相同点和每种设计模式区别其他设计模式的不同点之后(也就是抓住矛盾的普遍性和特殊性),就会发现其实一点都不多(甚至于还嫌少).(上学时候学的化学元素周期表够复杂吧?但只要知道了某种元素所在的族和所在族中的排行,学起来就容易多了.) 以下本着由远及近,由粗到细,由模糊到具体的认识原则来认识一下设计模式. 理论是对实践的一种抽象

23种Java设计模式(4)-关系模式

C.关系模式(11种) 先来张图,看看这11中模式的关系: 第一类:通过父类与子类的关系进行实现. 第二类:两个类之间. 第三类:类的状态. 第四类:通过中间类 父类与子类关系 一.策略模式(strategy) 策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户.需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数,关系图如下: 图中ICalculator提供同意的方法,A

23种常用设计模式的UML类图

本文UML类图参考<Head First 设计模式>(源码)与<设计模式:可复用面向对象软件的基础>(源码)两书中介绍的设计模式与UML图. 整理常用设计模式的类图,一方面是为了练习UML,另一方面可以重新思考设计模式.当然,整理完成后可以作为一份手册供今后翻阅. 绘图工具:Visual Studio 2015 一.创建型 Factory Method(工厂方法) 定义:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法让类把实例化推迟到子类. 类图: Abstr

【行为型模式】状态模式(state)之23种java设计模式

State接口类 public interface State { void handle(); } BookedState类 /** * 已预订状态 * @author Administrator * */ public class BookedState implements State { @Override public void handle() { System.out.println("房间已预订!别人不能定!"); } } CheckedInState类 /** * 已