大话设计模式-程杰
源码地址:http://www.cnblogs.com/Files/cj723/BigTalkDesignPattenSourceCode.rar
书的前面介绍了很多著作: 《设计模式:可复用面向对象软件的基础》(GOF的ERICH Gamm,Richard Helm, Ralph Johnson, John Vlissides) 《设计模式解析》(Alan Shalloway, James R. Trott) 《敏捷软件开发:原则、模式与实践》(Robert C.Martin) 《重构--改善既有代码的设计》(Martin Fowler) 《重构与模式》(Joshua Kerievsky) 《Java与模式》(阎宏) 《Head first design patterns》(eric freeman)
语言是c#
前面讲的还好,后面的有点扯的
分类
创建型
抽象工厂,建造者,工厂方法,原型模式,单例模式
结构型
适配器,桥接,组合,装饰,外观,享元,代理
行为型
观察者,模板方法,命令,状态,职责链, 解释器,中介者,访问者,策略,备忘录,迭代器
简单工厂模式
就是使用判断语句 来根据输入信息,得到对应的输出信息。 然后封装到单一的方法内部,不需要让调用者知道具体细节。
这样调用者还是需要知道工厂方法和输出信息。如:
策略模式
不过可以把工厂方法放在策略类内部,而不单独建立工厂类 同时输出信息就是策略类本身 这样调用方就只需要知道一个输出信息。
装饰模式
DecoratorComponent通过setComponent 持有被装饰者,然后可以进行修饰行为 当然在构造函数中直接设置可以让调用看起来更加爽快
代理模式
工厂方法模式
让子类决定实例化哪一种示例,用接口统一化实现
相对于简单工厂而言,不违背OCP。
原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 java里就是clone
模板模式
利用java的多态,抽象类设计抽象方法即可。。。
外观模式
定义一个高层接口,屏蔽了对一系列低层接口的细节操作 (就是统一操作?)
建造者模式
需要构建顺序稳定的情况。 先创建一个抽象类,然后用一个辅助类持有引用,并在创建方法中设定创建过程。
这种形式感觉没有Android Dialog.Builder的顺畅
观察者模式
常规观察者模式比较简单,一方持有观察者的列表,通知时遍历即可。最多抽取一下接口 但是对于现有的代码结构,可能不能都继承这样的接口,即行为不统一。 此时需要使用方法委托,而java的方法委托实际上是用反射实现的,参看EventHandler
抽象工厂模式
在需要配置 多个总组件,而每个组件下面又有基本一样的组件结构的时候。 可以考虑这种模式,甚至加上反射来简化。 (其实感觉平时写的时候,只要追求抽象,在业务逻辑有这种需要时,总能写出来这样的代码。)
状态模式
状态有序化
适配器模式
持有转化
备忘录模式
虽然clone有类似的效果,但是定制性不高。建议自己写一个需要的状态存储类 提了下命令模式。。又讲到下面去了。。
组合模式
树状依赖 透明方式:把非共有的方法也定义在抽象接口,在实现时如不需要则不进行操作 安全方式:把共有的方法抽象,而非共有的方法在需要的地方添加。
迭代器模式
foreach 咯
单例模式
桥接模式
有点莫名其妙的。。。把一个东西的多个维度,如有需要,抽取维度为独立的部分,被总体持有。
命令模式
感觉就是把一些被调用方的判断抽取成对应的类,和工厂方法模式有的一拼? 然后加个中间类进行控制,让被调用方对于调用方而言,更加直白。
职责链模式
链式请求,队列。。。
中介者模式
就是增加了中间类,持有所有需要交互的平级类。平级类又持有中间类,进行交互。 感觉加一些东西就是命令模式了。。。
享元模式
还是通过第三者存储,然后处理统一接口 主要目的是为了共享对象,当然也可以不共享(个人觉得这是基本操作吧?谈不上模式?) 如果有不能共享的数据,考虑从外部传入。。
解释器模式
接口设置不同的解释器,然后通过接口方法统一执行。层层过滤。。没了。。。 真的感觉后面的这些模式没啥差别啊。。。
访问者模式
很多时候,主体有确定数量的类别,但有很多属性。如果正常的设计,需要实例化不同类别的主体,再增加对应的属性。 而修改的可能性很高,且涉及到主体的多次修改。。。。 这个时候可以反其道而行,按属性抽象;同时将属性赋值给主体的同时,调用主体的对应方法,可以把属性的行为封装起来。 这样修改的时候,只需要添加属性具体类,并放入较少的主体信息即可。
Last updated
Was this helpful?