设计模式

设计模式的定义:设计模式与很多软件工程技术一样,模式起源于建筑领域,软件工程只有短短的几十年,与已经拥有几千年底蕴的建筑工程相比,后者有太多值得学习和借鉴的地方设计模式的英文单词是(Design pattern)Patterns,是具有某种重复性规律的方案。Design Patterns,就是设计过程中可以反复使用的、可以解决特定问题的设计方法。

设计模式的作用:设计模式能教会编程者提前判断代码写法的优劣以及对未来代码有一个预期规划 “模版方法模式”让你知道如何把细节问题交给具体类,而保持基础逻辑代码的清晰,设计模式同样也让你为扩展程序功能做好准备,发挥你的想象力;因为设计模式遵循着的原则:分别是

1、开闭原则的开:指的是可以在源代码的基础上进行扩展,比如继承,接口,抽象类等。闭,指的是原本封装好的代码不允许你去更改,比如JDK里面内置的Jar包。

2、里氏代换原则:当使用继承时,遵循里氏替换原则。当一个子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法,也尽量不要重载父类的方法。

3、依赖倒转原则:就是要依赖于抽象,不要依赖于具体。简单的说就是对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。

4、接口隔离原则:实现一个接口就需要实现该接口中定义的所有方法,因此大的总接口使用起来不一定很方便。

5、迪米特法则:定义 一个对象应该对其他对象保持最少的了解,让系统模块单一化。

6、合成复用原则:合成聚合复用原则,该原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的

原则是尽量使用合成/聚合的方式,而不是使用继承。当学习了设计模式,并固定他的编程思维,在学习还是工作中可以提高变成代码的可读性,和稳定性,在实际工作中思维对你的影响导致你在代码中灵活运用模式所带来的回报远大于套用工具和方法生搬硬套;设计模式能教会编程者提前判断代码写法的优劣以及对未来代码有一个预期规划。

设计模式根据目的分为:创建型、结构型、行为型。创建型模式主要用于创建对象;结构型模式主要用于处理类和对象的组合;行为型模式主要用于描述对类或对象怎么交互和怎么分配职责。

创建型有:

一、单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点。对于一些需要频繁创建和销毁的对象单例模式是可以提高系统的性能,但是滥用单例将带来一些负面问题。

二、抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。一般来说,抽象工厂最简单形态也至少有4个元素:

客户端(client)

工厂(factory)

产品A(product A)

产品B(product B)

三、工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,

工厂方法让类把实例化推迟到子类。

 四、建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。使用建造者模式可以使客户端不必知道产品内部组成的细节。可以更好的提高系统的扩展性。

五、原型模式:用原型实例指定创建对象的种类,主要面对的问题是:“某些结构复杂的对象”的创建工作。

 行为型有

  六、迭代器模式:提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示迭代器的好处是它是一个接口,这样你只用用接口约定的方法调用就可以迭代,如果考虑以后可能改变类型用迭代器会灵活点,这对系统的维护和升级具有较高的性能可以提高二次开发的效率。

 七、观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,会导致和他相关的类发生联动情况,所有依赖于它的对象都得到通知自动更新。

八、模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。

 九、命令模式:在软件系统中,“行为请求者”与“行为实现者”通常呈现一种紧耦合。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这里就利用到了命令模式。

十、状态模式:当对象的状态改变后,对象的行为也随之改变,就像改变了类一样。在类的定义中添加一个状态,对应不同的状态,类中的方法有不同的响应。

十一、,策略模式:定义一系列的算法,把他们一个个封装起来,并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户。

 十二、职责链模式:将多个能够响应某一请求的类,从低到高串成一条链,然后将请求沿着这条链传递,直到某一个类做出响应为止。使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系

 十三、中介者模式:用一个中介对象封装一些列的对象交互来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。

 十四、访问者模式:是一种分离对象数据结构与行为的方法,通过这种分离,可以为一个已存在的类增加新的操作而无须为它们进行修改,就是对有的类没有任何影响。 

 十五、解释器模式:给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

 十六、备忘录模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态可以提高系统的安全性。

 结构型有:

 十七、组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 组合对象 的含义。也就说组合模型是表示成体和部分之间的关系。

十八、外观模式:为子系统中的一组接口提供一致的界面,在很多门户网站都使用了外观模式,这个系统接口的子系统更容易使用。

 十九、代理模式:多一个代理类出来,为原对象进行操作。能帮助原对象完成一些他自己完成不了的功能,相当于一个帮助者。此模式,可以将功能划分更清晰,有助于后期维护。

 二十、适配器模式:将一类的接口转换成客户希望的另外一个接口,主要是用在现有类的接口与需要的不一致,比如说你手机充电的接口是圆的,而现在手头只有一根接口为扁形的充电器,那就没法使用,得使用一个适配器,输入为扁形,输出为圆形,比如在系统中收集不同的数据处理成为客户所想要的数据。

 二十一、装饰模式:动态地给一个对象增加一些额外的职责、动态地为一个对象增加新功能,且能撤销,。扩展一个类的功能

 二十二、桥模式:将抽象部分与它的实现部分相分离,使他们可以独立的变化。

 二十三、享元模式:使用共享物件,利用共享技术,将一些细小的对象重复使用,不占用过多的资源。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。

原文地址:https://www.cnblogs.com/hanzhu/p/6665161.html