浅谈设计模式<最通俗易懂的讲解>

1、什么是设计模式java

设计模式是一套被反复使用、多数人知晓的、通过分类编写的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式使代码编程真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖头同样。项目中合理的运用设计模式能够完美的解决不少问题,每种模式都有响应的原理与之对应,每个模式描述了一个在咱们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被普遍应用的缘由。算法

2、设计模式的三大分类及关键点编程

一、建立型模式:对象实例化的模式,建立型模式用于解耦对象的实例化过程。设计模式

  1. 单例模式:某个类智能有一个实例,提供一个全局的访问点。
  2. 工厂模式:一个工厂类根据传入的参量决定建立出哪种产品类的实例。
  3. 抽象工厂模式:建立相关或依赖对象的家族,而无需明确指定具体类。
  4. 建造者模式:封装一个复杂对象的建立过程,并能够按步骤构造。
  5. 原型模式:经过复制现有的实例来建立新的实例。

二、结构型模式:把类或对象结合在一块儿造成一个更大的结构。服务器

  1. 装饰器模式:动态的给对象添加新的功能。
  2. 代理模式:为其它对象提供一个代理以便控制这个对象的访问。
  3. 桥接模式:将抽象部分和它的实现部分分离,使它们均可以独立的变化。
  4. 适配器模式:将一个类的方法接口转换成客户但愿的另外一个接口。
  5. 组合模式:将对象组合成树形结构以表示“部分-总体”的层次结构。
  6. 外观模式:对外提供一个统一的方法,来访问子系统中的一群接口。
  7. 享元模式:经过共享技术来有效的支持大量细粒度的对象。

三、行为型模式:类和对象如何交互,及划分责任和算法。数据结构

  1. 策略模式:定义一系列算法,把他们封装起来,而且使它们能够相互替换。
  2. 模板模式:定义一个算法结构,而将一些步骤延迟到子类实现。
  3. 命令模式:将命令请求封装为一个对象,使得能够用不一样的请求来进行参数化。
  4. 迭代器模式:一种遍历访问聚合对象中各个元素的方法,不暴露该对象的内部结构。
  5. 观察者模式:对象间的一对多的依赖关系。
  6. 仲裁者模式:用一个中介对象来封装一系列的对象交互。
  7. 备忘录模式:在不破坏封装的前提下,保持对象的内部状态。
  8. 解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器。
  9. 状态模式:容许一个对象在其对象内部状态改变时改变它的行为。
  10. 责任链模式:将请求的发送者和接收者解耦,使的多个对象都有处理这个请求的机会。
  11. 访问者模式:不改变数据结构的前提下,增长做用于一组对象元素的新功能。

3、设计模式的几种原则多线程

一、开闭原则组件化

(1)对于扩展是开放的(Open for extension)。这意味着模块的行为是能够扩展的。当应用的需求改变时,咱们能够对模块进行扩展,使其具备知足那些改变的新行为。也就是说,咱们能够改变模块的功能。学习

(2)对于修改是关闭的(Closed for modification)。对模块行为进行扩展时,没必要改动模块的源代码或者二进制代码。模块的二进制可执行版本,不管是可连接的库、DLL或者.EXE文件,都无需改动。ui

二、里式代换原则

任何基类能够出现的地方,子类必定能够出现。里氏代换原则是继承复用的基石,只有当衍生类能够替换基类,软件单位的功能不受影响时,基类才能真正的被复用,而衍生类也可以在基类的基础上增长新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,因此里氏代换原则是对实现抽象化的具体步骤的规范。

三、依赖倒转原则

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

四、接口隔离原则

客户端不该该依赖它不须要的接口,一个类对另外一个类的依赖应该创建在最小的接口上。

五、迪米特法则

迪米特法则又叫作最少知识原则,就是说一个对象应当对其它对象又尽量少的了解,不和陌生人说话。

六、合成复用原则

合成复用原则要求在软件复用时,要尽可能先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。若是要使用继承关系,则必须严格遵循里氏替换原则。合成复用原则同里氏替换原则相辅相成的,二者都是开闭原则的具体实现规范。

4、设计模式关系

5、设计模式感想

一共有23种设计模式,能够说都是为了提升代码的可读性、可扩展性、可复用性、类的可替换性、组件化、可移植性等等特性。经过接口、抽象类、继承、实现、委托、抽象、面向接口编程、多态、重载、重写等方式使得代码的这些特性得以彰显,能够说只有深入的理解了这些概念背后的哲学思想才能更好的理解设计模式。在设计模式中有不少思想,好比可使用委托的不要使用继承、开闭原则,面向扩展开放,面向修改关闭,里式代换原则,父类必定能被子类代替并使用,反置则否则,面向接口编程,功能层次和实现层次分离(桥接模式)、高内聚低耦合等思想,这些思想都是宝贵的,正是由于这样的思想的存在才使得代码的更新换代的时候可以尽量少的甚至不用修改以前的代码,直接加入新的内容。提升软件的开发周期,便于维护和升级,便于查找和纠错,易于扩展和使用。

一样的设计模式主要分为三大类,建立型、行为型、结构型。咱们能够简单的这样分类,只不过这样的分相似乎并不许确,不能一语道出全部的本质,设计模式是相互关联的,有的设计模式内部实际上是使用了别的设计模式做为支撑的,可是大致上这样的一种划分便于咱们去记忆,仅此而已。

仔细的回顾一下咱们前面学习的设计模式,看看咱们能想到多少,从迭代器开始,咱们将类中数据结构的遍历和类的功能实现分离出来,本质上使用了工厂模式。其次咱们学习了适配器模式,它将不一样的接口进行适配,从而便于版本的兼容性以及其余功能,而后咱们学习了模板方法,使用模板面向抽象编程,便于新的子类的实现和管理;以后学习了工厂模式,其实借用了模板模式来建立产品,是一种很是重要用处很广的一种方法;而后咱们学习了单例模式,有懒汉式、饿汉式等,生成关于某个类全局惟一的对象,注意多线程的影响;以后是原型模式,用来复制复杂的对象,使用了clone方法,而后是builder模式,用一个新的类对已有的抽象接口进行整合和编程,从而构建出咱们想要的东西;而后是抽象工厂模式,使用了工厂模式,组合模式等模式,面向抽象编程,将抽象零件组装成抽象产品,便于具体工厂的建立,提升了代码的组件化和复用性;而后是桥接模式,将类的功能层次和实现层次分割开来,便于对应的扩展和使用;而后是策略模式,能够总体的替换策略,使用也很普遍;而后是组合模式,保证了同根同源,经过委托添加本身构成递归,树形结构,将具备树形特色的对象组合起来;而后是装饰器模式,和组合模式的结构相似,一样是递归结构,从而能够不断的装饰,增长新的功能,很好用;接着是visitor访问者模式,经过在类外访问类中的数据结构从而获得想要的结果,便于程序的可扩展性和组件化;接着是责任链模式,推卸责任,根据问题的大小来考虑本身释放处理,本质是链表,便于职责分明;而后是外观模式,经过整合各个类之间的调用关系,组建成了统一的接口(API),便于外部类的调用;接着是仲裁者模式,将不少类之间互相关联的关系交给仲裁者处理,省去了各个类之间的嵌套和调动,有利于高内聚和低耦合,思路清晰,便于扩展;而后是观察者模式,经过互相委托从而可以在被观察的类发生改变的时候获得相应的改变的信息而且处理;而后是备忘录模式,经过在某一时刻的状态保存下来,便于恢复,在游戏中使用的比较多;而后是状态模式,将状态当作类,从而职责分明,解除了不少繁琐的if和else这些分支逻辑,便于扩展;而后是享元模式,轻量级对象,经过共用不变对象来实现;而后是代理模式,懒加载真正的服务器,加快访问速度,代理是帮助服务器代理的;而后是命令模式,将命令当作类,经过保存一些列命令,从而可以随时执行这些命令,须要清除命令的本质就是一些操做和数据;最后是解释器模式,利用编程原理的方法,来更高层次的封装代码,将本身开发的java代码当作编译系统,从而不用改变java代码只修改更高语言层次的代码就能实现不一样的功能。

相关文章
相关标签/搜索