设计模式之总结篇
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之总结篇相关的知识,希望对你有一定的参考价值。
十一宅了,也没学习看啥书,所有时间花在了围棋上,虽然很颓废,不过令人欣慰的是居然升了3级,现在是6k水平,
之前晚上下的多,停在9k挺长时间的,居然在10.1突破了,这么看来我能升段的目标还是可能实现的,这么看自信还真是挺重要的,而我一直不算个自信的人,
本来打算10.1假期完成这个设计模式总结的,但是懒癌爆发,就拖到今天啦。
设计模式的6大原则
这也是个老生常谈的问题,我也不免俗
1.单一职责原则
一个类只承担一个职责
2.开放-封闭原则
对扩展开放,对修改关闭,即尽量以扩展的方式来维护系统
3.里氏替换原则
表示我们可以在代码中使用任意子类来替代父类并且程序不受影响,这样可以保证我们使用“继承”并没有破坏父类
4.接口隔离原则
客户端不应该依赖于它不需要的接口,两个类之间的依赖应该建立在最小接口的基础上。这条原则的目的是为了让那些使用相同接口的类只需要实现特定必要的一组方法,而不是大量没用的方法专而小的接口,而不是总接口
5.依赖倒置原则
抽象不依赖于细节,而细节应该依赖于抽象。提倡“面向接口”编程,而非“面向实现”编程
6.迪米特法则
用设计行话就是“高内聚,低耦合”,减少类之间的相互依赖,修改系统的某一部分的时候,不会影响到其他部分,使系统有更好的维护性
设计模式分类
创建型:
单例:保证一个类只有一个实例,其中jdk中枚举(Enum)类是单例。
简单工厂:静态工厂方法,根据传递参数的不同,返回不同的实例。
工厂方法:定义创建对象的接口,让子类去决定具体使用哪个类。
Collection.iterator()
java.lang.Proxy#newProxyInstance()
java.lang.Object#toString()
java.lang.Class#newInstance()
java.lang.reflect.Array#newInstance()
java.lang.reflect.Constructor#newInstance()
java.lang.Boolean#valueOf(String)
java.lang.Class#forName()
抽象工厂:提供一个创建一系列相关的对象的接口,而无须指定它的具体实现类
jdk中 java.sql.*
原型:用原型实例指定创建对象的种类,并通过复制原型实例得到对象
jdk中 java.lang.Object#clone(),java.lang.Cloneable
建造者:简化复杂对象的创建,将复杂对象的构造与表示相分离,使得同样的构造过程可以产生不同的复杂对象
jdk中 java.sql.PreparedStatement
结构型:
适配器:将一个类的接口转换成用户希望的另一个接口
jdk中 java.io.OutputStreamWriter(OutputStream),java.util.Arrays#asList()
桥接:将抽象部分与实现部分分离,从而使得它们可以独立变化,使各部分组件化
jdk中的JDBC
组合:将对象组装成树状结构以表示“部分-整体”的关系
java.util.Map#putAll(Map),java.util.List#addAll(Collection)
装饰:动态的为对象添加额外职责
jdk中IO包
外观:为系统的一组接口提供一个一致的界面,使外观一致
jdk中java.lang.Class
享元:它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件
jdk中 java.lang.Integer#valueOf(int)
java.lang.Boolean#valueOf(boolean)
java.lang.Byte#valueOf(byte)
java.lang.Character#valueOf(char)
代理:为其他对象提供一种代理以控制对该对象的访问
jdk中 java.lang.reflect.Proxy
java.rmi.*
行为型:
责任链:实施一系列的操作,并且使调用双方和操作之间有耦合关系
jdk中 java.util.logging.Logger#log()
javax.servlet.Filter#doFilter()
命令:对一个客户端请求封装成抽象对象
jdk中 java.lang.Runnable
javax.swing.Action
解释器:一种按照规定语法进行解析的方案
jdk中 java.util.Pattern
java.text.Format
迭代器:顺序访问集合中的所有元素
jdk中 java.util.Iterator
中介:用一个中介者对象封装一系列的对象交互
jdk中 java.lang.reflect.Method#invoke()
备忘:备份或者恢复复杂对象的状态
jdk中 java.io.Serializable
观察者:当一个对象发生改变时,所有和它有依赖关系的对象都会得到通知
jdk中 java.util.Observer/java.util.Observable
java.util.EventListener
状态:类的行为是基于它的状态改变
jdk中 java.util.Iterator
策略:定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换
jdk中java.util.Comparator#compare()
模板:定义一个操作流程的方法骨架,具体细节的实现放到子类中
jdk中java.io.InputStream, java.io.OutputStream, java.io.Reader和java.io.Writer的所有非抽象方法
java.util.AbstractList, java.util.AbstractSet和java.util.AbstractMap的所有非抽象方法
javax.servlet.http.HttpServlet#doXXX()
java.util.Collections#sort()
访问者:作用于某个对象群中各个对象的操作. 它可以使你在不改变这些对象本身的情况下,定义作用于这些对象的新操作
jdk中javax.lang.model.element.Element 和javax.lang.model.element.ElementVisitor 设计模式写到这里算告一段落啦,虽然我看过几遍,并且参考这种博客书籍写下了这些篇内容,但是问自己这些模式就真的懂啦嘛,我可以肯定的说不是的,像其中解释器访问者都是什么鬼,我依然很难解释清楚,还是用的少,或者都是封装完整的,很少需要自己去封装这么多的模式,这种思想的种子算埋下啦,至于开不开花真的靠悟性啦,我至今还未开悟...
系列博文参考博客及书籍在此一并列出:
博客:http://blog.csdn.net/lovelion/article/details/17517213
书:研磨设计模式
博客:http://www.cnblogs.com/zuoxiaolong/category/509144.html
博客:http://www.iteye.com/news/18725
等等...
以上是关于设计模式之总结篇的主要内容,如果未能解决你的问题,请参考以下文章