模式概念:
模式是帮助你从别人的成功经验而不是从自己的失败经验哪里学习更多的东西!!!!!
什么是模式???
模式体现的是程序整体的结构构架!!!
模式即增加一个抽象层。无论什么时候,当你想把某些东西抽象出来的时候,实际上你是在分离特定的细节,这么做的一个有说服力的动机就是把变化的东西从那些不变的东西里分离出来.
设计模式的目的就是为了把代码里变化的那一部分分离出来.........
模式的分类:
1.创建型:如何创建一个对象,这通常包括分离对象的创建细节,这样的代码创建对象是就不依赖于创建对象的类型,而且加入新的对象,也不必改写代码!!!!!! Singleton,Factory Method ,Prototype,
2.结构型:设计出满足某些工程里特定约束的对象.他的工作原理是:一组对象和其他对象发生关联,当系统发生变化的时候,这些对象之间的关联关系保持不变!!!
3.行为型:指一个程序里处理一些列特定操作类型的对象.他们封装了一些列的操作!!!封装操作 observer , visitor, iterator , interpreting,
开发面临的挑战
UML过程,极限编程(xp)
简化(simplifying idoms)
信使(messager)
最普通的方法就是通过信使,他简单的将信息打包成一个对象,用于传输,而不是将这些信息碎片单独传输!!!!
集合型参数(collecting parameter)
collecting parameter 是messenger的兄弟,messagener传递参数给一个方法,而collecting parameter是从一个方法中获取信息.一般情况是collecting parmeter 传给多个方法(multipart method)的情况下!!!! collecting parameter必须支持通过某些方法来设置或者插入一些值,其collecting 参数是由他传递给的方法来修改!!!
对象数量(object quantity)
这里描述的两个模式都是可以单独用来控制对象的数量!!!
单件(singleton):提供一种方法,使得某一特定类型只存在一个,并且只能是一个对象:
单件的目标:防止用户可以以其他方式来创建对象,而且只能用你所提供的方式来创建对象.
类创建private私有,类类型final,通过公共方法返回类的引用对象.
对象池(object pool):没有限制只能创建一个对象.这种技术同样适用于创建固定数量的对象,当时这种情况下,你就可以得面对如何共享对象池里的对象这种问题.
对象去耦(object decoupling)
代理模式(proxy)和状态模式(state)分别提供了共我们使用的代理类(surrogate class);真正干活的那个累被代理类隐藏了.当我们调用代理类的一个方法时,代理类只是简单的调用实现类(implementing class)的方法.这两个模式的基本概念非常简单:代理类和实现类都由同一个基类派生 出来..
代理:替另外一个对象打点一切...
动态代理类; invocation handler 的实现应该是和动态创建的代理对象所提供的那些接口完全无关的.!!!1
状态模式:改变对象的行为;
一个用来改变类的(状态的)对象;
proxy模式的一般应用:
1.远程代理(remote proxy)为一个对象在不同的地址空间提供局部代理.
2.虚代理(virtual proxy ) 根据需求,在创建复杂对象时,使用"延时初始化"(lazy initialization)
3.保护代理(protection proxy)用于不希望客户端程序员完全控制被代理对象(proxied boject)的情况下;
4.智能代理(smart reference)当访问被代理对象时提供额外的动作时...
迭代器:分离算法和容器
用迭代器写的任何代码都与它所操作的数据结构相分离,这样一来,这些代码就更为通用和易于重用....
分解公用性(factoring commonality)
应用一次且只能有一次的原则产生最基本的模式,将变化的那部分代码放到方法里...
策略模式(stategy):运行时刻选择算法;
Policy模式:泛化的strategy模式:
用strategy模式处理一个方法(变化)的情况,而用policy模式处理多个方法...
模板模式:(template method):是应用程序框架的一个基本概念....
一个重要的特征:他是在基类里定义的,而且不能够被(派生类)更改,有时候他是私有方法(private method),但实际上他经常被声明为final;
封装创建(encapsulating creating)
强制使用一个通用工厂(common factory)来创建对象,而不允许创建对象的代码分散在整个系统里.----把创建集中在一起处理.....
简单工厂方法(simple factory method):
静态的factory()方法使得所用创建对象的操作都集中在一个地方完成,这也就是唯一需要修改代码的地方...
多态工厂(Polymorphic factories)
抽象工厂(abstract factory)模式:基本思想:在创建工厂对象的地方,有你来决定如何使用该工厂对象来创建那些对象!!!
特化创建(specialized creation)
原型模式(prototype)
通过克隆某个原型的实例来创建对象.
生成器(Builder)
builder模式的目的是为了将对象的构造与它的表示(representation)分离开来,这样对象据可以有多个不同的表示.对象构造的过程保持不变,但是最终创建的对象可以有不同的表示.
太多(too many )
享元模式(Flyweight):太多对象 62页