设计模式介绍

设计模式

来源

四人帮:四人帮(Gang of Four,GoF)指被称为设计模式先驱的四人:Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides。
在20世纪90年代他们就出版了划时代的著作:《设计模式:可复用面向对象软件的基础》

简介

设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案,经过众多前辈长久实践总结出来的结果。有助于开发人员开发,使用设计模式的代码高可用性、代码更简洁、可读性、可靠性更高。项目中合理地运用设计模式可以完美地解决很多问题,更能避免更多的问题,使项目的可维护性更高,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们项目中不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。

类型

1、创建型模式 共五种
创建型模式旨在将系统与它的对象创建、结合、表示的方式分离。这些设计模式在对象创建的类型、主体、方式、时间等方面提高了系统的灵活性。而不是使用 new 运算符直接实例化对象。避免可能会导致设计上的问题,或增加设计的复杂度。
单例模式: 全局只有一个实例,并对外提供一个访问接口。
抽象工厂模式: 创建对象相关接口,而不需要直接显示类。
工厂模式: 具备创建对象的接口,通过接口访问创建的对象,而不需要暴露创建逻辑。
建造者模式: 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。
原型模式: 用已经创建的一个实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。

2、结构型模式 共七种
通过改变代码结构来达到解耦的目的,使代码更容易维护和拓展。
适配器模式: 将一个类的接口转换成另外一个接口,解决接口不兼容问题。
桥接模式: 将抽象与实现分离,组合关系代替继承关系,解决若自定义增加不同维度用继承方式会造成类爆炸问题。
组合模式: (整体模式)把一些相似的对象,整合冲树形结构的对象组
装饰模式: 在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)。
外观模式: 对外统一一个接口,外部应用可直接访问,这样会大大降低应用程序的复杂度,提高了程序的可维护性及兼容性。
享元模式: 共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销,从而提高系统资源的利用率。
代理模式: 为其他对象提供一种代理以控制对这个对象的访问。

3、行为型模式 共十一种
单个对象无法完成的功能,通过行为型模式,对象之间相互通信与协作完成某些复杂功能,但此时一个对象在运行时也将影响到其他对象的运行。
责任链模式: 一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。
命令模式: 将请求封装成对象,并将参数传给调用对象。调用对象寻找可以处理该请求的合适的对象,并把该参数传给相应的对象,该对象执行命令。
解释器模式: 解释器模式就是将一个问题表示为语言,然后设计一个解释器来解释这个语言,从而解决问题。
迭代器模式: 提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。
中介者模式: (调停模式)定义一个中介角色来封装一系列对象之间的交互,通过中介进行相互访问,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。
备忘录模式: (快照模式)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态,比如ctrl+z。
观察者模式: 当一个对象被修改时,则会自动通知依赖它的对象。
状态模式: 对有状态的对象,把复杂的“判断逻辑”提取到不同的对象状态中,当状态对象在其内部状态发生改变时可以同步改变其行为。
策略模式: 定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。比如我要去上海,可以乘坐高铁,也可以将高铁替换成飞机。
模板模式: 定义主框架,将算法的步骤写在子类中,可以实现不改变主框架结构,可以自定义重写一些功能的实现。
访问者模式: 表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。

六(七)大原则

单一职责原则
一个对象只包含单一的职责,并且该职责应该被完整的封装到一个类中。
开闭原则
一个软件的实体的类或者模块,应该对扩展开放,对修改关闭。
里式替换原则
子类可以扩展父类的功能,但不能改变父类原有的功能。
接口隔离原则
应该建立单一接口,不应该建立臃肿庞大的接口。接口尽量细化,同时接口中的方法尽量少。
依赖倒置原则
高层模块不应该依赖低层模块,两者都应该依赖其抽象,抽象不应该依赖细节,细节应该依赖抽象。
迪米特原则
应该尽量减少对象之间的交互,如果两个对象不必直接通信,那么这两个对象就不应该发生任何直接的相互作用,如果其中一个对象需要调用另外一个对象的某个方法时,可以通过第三者转发这个调用。

同时还有部分文献经常提到的原则
组合/聚合复用原则
在软件复用时,应该先考虑使用合成或者聚合等关联关系来实现,其次考虑使用继承关系来实现。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值