设计模式总结
一、设计模式分类
2.1、按类型分为:
创建型模式:工厂方法、抽象工厂模式、原型模式、单例模式、建造者模式
结构型模式:适配器、组合模式、装饰器模式、桥接模式、外观模式、FlyWeight模式、代理模式
行为型模式:迭代器、模板方法、策略模式、仲裁者模式、访问者模式、命令模式、解释器模式、观察者模式、责任链模式、状态模式、备忘录模式
2.2、设计模式的几种原则:
1、开闭原则(Open Close Principle)
2、里氏代换原则(Liskov Substitution Principle)
3、依赖倒转原则(Dependence Inversion Principle)
4、接口隔离原则(Interface Segregation Principle)
5、迪米特法则(最少知道原则)(Demeter Principle)
6、合成复用原则(Composite Reuse Principle)
2.3、设计模式关系
二、设计模式感想
呼,长出了一口气,很久以前就对设计模式痴迷至深,奈何第一没有好的资料,第二很多东西看了就忘,没能好好的整理下来,如今想想也是个遗憾。前几天突然萌生了写一下设计模式这样的想法,现有的文章和资料很多,能够写完这些设计模式,网上的资料,以及一些书籍对我的帮助都很大,可以说这23中设计模式,我是一边学习一边写出来的,这些程序在书本的启发之下都是我自己一点点写出来的,没有参考任何的资料,所以理解的还比较深。就我而言,到了现在差不多十天左右的时间,对于设计模式可谓是有了更深层次的认识。其实设计模式这个词汇也是翻译过来的最成功的一个词汇之一。在我们的程序设计之中,就是应该有这样的高屋建瓴的架构和模式才能使得我们的程序更加的具有复用性和扩展性。仔细思考这23种设计模式,可以说都是为了提高代码的可读性、可扩展性、可复用性、类的可替换性、组件化、可移植性等等特性。通过接口、抽象类、继承、实现、委托、抽象、面向抽象(接口)编程、多态、重载、重写等方式使得代码的这些特性得以彰显,可以说只有深刻的理解了这些概念背后的哲学思想才能更好地理解设计模式。在设计模式之中也有很多的思想,比如可以使用委托的不要使用继承、开闭原则,面向扩展开放,面向修改关闭,里氏代换原则,父类一定能被子类代替并使用,反之则不然,面向抽象(接口)编程,功能层次和实现层次分离(桥接模式)、高内聚低耦合等思想,这些思想都是宝贵的,正是因为这样的思想的存在才使得代码的更新换代的时候能够尽可能少的甚至不用修改以前的代码,直接加入新的内容。提高软件的开发周期,便于维护和升级,便于查找和纠错,易于扩展和使用。
同样的设计模式主要分为三大类,创建型的、行为型的、结构型的,我们可以简单的这样分类,只不过这样的分类似乎并不准确,不能一语道出所有的本质,因为我前面就说过,设计模式是相互关联的,有的设计模式内部其实是使用了别的设计模式作为支撑的,但是大体上这样的一种划分便于我们去记忆,仅此而已。
仔细的回顾一下我们前面学习的设计模式,看看我们能想到多少,从迭代器开始,我们将类中数据结构的遍历和类的功能实现分离出来,本质上使用了工厂模式。其次我们学习了适配器模式,它将不同的接口进行适配,从而便于版本的兼容性以及其他功能,然后我们学习了模板方法,使用模板面向抽象编程,便于新的子类的实现和管理;之后是工厂方法,其实借用了模板方法来创建产品,是一种非常重要用处很广的一种方法;然后我们学习了单例模式,有懒汉式、饿汗式等,生成关于某个类全局唯一的对象,注意多线程的影响;之后是原型模式,用来复制复杂的对象,使用了clone方法,然后是Builder模式,用一个新的类对已有的抽象接口进行整合和编程,从而构建出我们想要的东西;然后是抽象工厂模式,使用了工厂模式,组合模式等模式,面向抽象编程,将抽象零件组装成抽象产品,便于具体工厂的创建,提高了代码的组件化和复用性;然后是桥接模式,将类的功能层次和实现层次分割开来,便于对应的扩展和使用;然后是策略模式,可以整体的替换策略,使用也很广泛;然后是组合模式,保证了同根同源(一致性、透明性),听过委托添加自己构成递归,树形结构,将具有树形特点的对象组合起来;然后是装饰器模式,和组合模式的结构类似,同样是递归结构,从而可以不断地装饰,增加新的功能,很有用;接着是Visitor访问者模式,通过在类外访问类中的数据结构从而得到想要的结果,便于程序的可扩展性和组件化。接着是责任链模式,推卸责任,根据问题的大小来考虑自己是否要处理,本质是链表,便于职责分明;然后是外观模式,通过整合各个类之间的调用关系,组建成了统一的接口(API),便于外部类的调用;接着是仲裁者模式,将很多类之间互相关联的关系交给仲裁者去处理,省去了各个类之间的嵌套和调用,有利于高内聚和低耦合,思路清晰,便于扩展;然后是观察者模式,或者叫做发布订阅模式,通过互相委托从而能够在被观察的类发生改变的时候得到相应的改变的信息并且处理;然后是备忘录模式,将对象在某一时刻的状态保存下来,便于恢复,在游戏中使用的很多;接着是状态模式,将状态当做类,从而职责分明,解除了很多繁琐的if和else这些分支逻辑,便于扩展。然后是FlyWeight模式,轻量级对象,通过共用不变对象来实现,然后是Proxy代理模式,懒加载真正的服务器,加快访问速度,代理是帮助服务器代理的;然后是命令模式,将命令当做类,通过保存一些列命令,从而能够随时执行这些命令,需要清楚命令的本质就是一些操作和数据。最后是解释器模式,利用编译原理的方法,来更高层次的封装代码,将自己开发的Java代码当做编译系统,从而不用修改Java代码只修改更高语言层次的代码就能实现不同的功能。这就是我们的设计模式。
原文地址:https://www.cnblogs.com/zyrblog/p/9255224.html