设计模式基础理论

1. 设计模式概述

设计模式是一套被反复使用、多数人知晓的、经过分类编排、代码设计经验的总结。使用设计模式是为了提高代码的可重用性和可维护性,保证程序的可靠性。

常见的23种设计模式按照类型分类表:

模式创建型模式结构型模式行为型模式
类模式工厂方法(类)适配器模板方法、解释器
对象模式单例 、原型 、 抽象工厂、建造者代理 (对象)、适配器 、桥接、 装饰 、外观、享元、组合策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录

设计模式主要是OOP的六项基本设计原则的抽象实现。

1)开-闭原则:Open close principle,一个软件模块对扩展是开放的,对于修改是封闭的。这里的修改封闭并不是不允许修改,而是修改尽可能地小,对修改要有严格的控制。

2)单一职责原则:Single responsibility principle,一个类,一个方法只做一件事。

3)里氏替换原则:Liskov Substitution principle, 任何时候子类可以替换基类,使用到基类的地方替换为子类不会出现任何异常。

3)依赖倒换原则:Dependence Inversion Principle,抽象不依赖于实现细节,实现细节依赖于抽象。这里抽象可以是接口,抽象类,基类。实现细节可以是实现类,子类。即接口等抽象不依赖于实现,而子类,实现类等依赖于抽象。可以理解为面向接口编程。

5)接口隔离原则:Interface Segregation Principle,一个类不应该依赖于它不需要的接口,应该建立单一接口,而不是功能臃肿的接口。

6)迪米特原则:Low of Demeter,又称最少知识原则,一个对象应该对其他对象有最少的了解(低耦合)。

2. 设计模式(design pattern)

2.1 单例模式(singleton)

一个类只有一个实例,提供全局访问点供外部获取实例。

2.2 原型模式(prototype)

将一个对象作为原型,通过对其复制而克隆出多个与原型类似的新实例。

2.3 工厂方法模式(factory method)

定义一个用于创建产品的接口,具体生产什么产品由子类决定。

2.4 抽象工厂模式(abstract factory)

提供一个创建产品族的接口,其每个子类可以生产一系列的相关产品。

2.5 建造者模式(builder)

将一个复杂对象分解成多个简单的部分,然后根据实际需要分别创建它们,最后构建成复杂的对象。

2.6 代理模式(proxy)

为某对象提供一个代理对象控制该对象的访问,通过代理对象对原有对象进行增强。

2.7 适配器模式(adapter)

将一个接口转换成客户希望的另一个接口,让之前由于接口不兼容而不能一起工作的类能够一起工作。

2.8 桥接模式(bridge)

将抽象和实现分离,使它们可以独立变化。它是用组合关系代替了继承关系来实现,从而降低了抽象和实现两个可变维度的耦合度。

2.9 装饰模式(decorator)

动态地给对象增加一些职责,即增加一些功能。

2.10 外观模式(facade)

为多个负责的子系统提供一个统一的接口,让这些子接口更容易被访问。

2.11 享元模式(fly weight)

利用共享技术支持大量细粒度对象的复用。

2.12 组合模式(composite)

将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。

2.13 模板方法模式(template method)

定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。

2.14 策略模式(strategy)

定义一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法的客户。

2.15 命令模式(command)

将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分隔开。

2.16 职责链模式(chain of responsibility)

把请求从链中的一个对象传到下一个对象,直到请求被响应为止。通过这种方式去除对象之间的耦合。

2.17 状态模式(state)

允许一个对象在其内部状态发生改变时改变其行为能力。

2.18 观察者模式(observer)

多个对象间存在一对多关系,当一个对象发生改变时,将这种改变通知给其他多个对象,从而影响其他对象的行为。

2.19 中介者模式(mediator)

定义一个中介对象来简化原来对象之间的交互关系,降低系统中对象间的耦合度,使原有对象之间不必相互了解。

2.20 迭代器模式(iterator)

提供一种方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。

2.21 访问者模式(visitor)

在不改变集合元素的前提下,为一个集合中的每个元素提供多种访问方式,即每个元素有多个访问者对象访问。

2.22 备忘录模式(memento)

在不破坏封装的前提下,获取并保存一个对象的内部状态,以便以后恢复它们。

2.23 解释器模式(interpreter)

提供如何定义语言的文法,以及对语言句子的解释方法,即解释器。

tips:这23种设计模式不是独立存在的,很多模式之间存在一定的关联关系,在一个大的系统中通常会同时使用多种设计模式。

参考:

           http://c.biancheng.net/view/1320.html

           https://www.cnblogs.com/cyd123/p/6742218.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值