当前位置:首页 > 设计模式
? ?
产品有复杂的内部结构。
产品对象的属性相互依赖(有些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义, 有些情况下,一个对象会有一些重要的性质,在他们没有恰当那个的值之前,对象不能作为一个完整的产品使用。(比如邮件))。 在对象创建过程中,会使用到系统中的其他一些对象。这些对象在产品对象创建过程中不易得到。
建造模式的使用使得产品的内部表象可以独立的变化。使用建造模式可以使客户端不必知道产品内部组成的细节。
? ? ?
1.7 原始模型prototype
有个原型,每次都不是new出来的是克隆出来的 这个方法用的很少.速度还不如new快呢.
1.8 ok适配器模式Adapter
? ? ? ? ?
?
也叫变压器模式 也叫包装(wraper)模式
适配器模式的用意:改变源的接口,以便与目标接口相容
把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
有两种,类的适配器模式,对象的适配器模式
? 类的适配器模式把被适配的类的API转换成了目标类的API 。Adaptee和Adapater?
是继承的关系。这决定了这个适配器模式是类的。
与类的适配器模式一样,对象的适配器模式把被适配的类的API转换成了目标类的API。与类的适配器模式不同的是,对象的适配器模式不是使用继承关系连接到Adaptee类,而是使用委派关系连接到Adaptee类。Adapter和Adaptee是委派关系。决定了这个适配器模式的对象的。
?
举例
? iterator与enumeration的适配
? Jdbc/odbc桥,就是适配器模式的具体应用. 与装饰模式的关系
? 装饰类不能改变他所装饰的对象的接口
?
1.9 ok缺省适配模式Default Adapter
缺省适配器模式为一个接口提供缺省实现,这样子类可以从这个缺省实现来继承,而不必从原有接口来进行扩展。
适配器模式的用意是要改变源的接口,以便与目标类的接口相容。缺省适配器的用意稍有不
同。它是为了方便建立一个不平庸的适配器类而提供的一种平庸的实现。
缺省适配器类应当是抽象的,因为这个类不应当实例化,它的实例也没有什么用途。
1.10 合成模式Composite
讲到树状结构的时候再讲
合成模式把部分何整体的关系用树状结构表示出来。 文件系统是一个典型的合成模式 两种方式:透明方式和安全方式
安全方式:要求管理聚集的方法只出项在树枝构件类中。
在AWT中,Button和Checkbox是树叶,Container是树枝。AWT中使用的是安全形式的合
成模式。好处:客户端不用知道到底是树枝还是树叶。
1.11 装饰模式Decorator
不说他了.提到的时候再说不是很重要.
装饰模式,常常被称作包裹模式,每一层包裹都提供了一些新的功能
需要扩展一个类的功能,或者给一个类增加附加功能。,
装饰模式与继承关系的目的都是扩展对象的功能。但是装饰模式可以提供比继承更多的灵活性
装饰模式是java io 库的整体设计模式.
装饰模式在java语言中的最著名的应用莫过于java io标准库的设计了.
面向抽象编程。
Component c = new ConcreteComponet(); Component c1 = new ConcreteDecorator1(c); Component c2= new ConcreteDecorator2(c);
这样是不对的。
ConcreteComponent c = new ConcreteDecorator()
在使用java io库的时候,必须理解java io 库是由一些基本的原始流处理器和围绕他们的装饰流处理器组成的.这样,可以在学习和使用javaio库的时候做到事半功倍的效果.
BufferedInputStream装饰了InputSteam的内部的工作方式.使得流的读入操作使用缓冲机制.不会对流的每一次读入操作都产生一个物理的读盘操作.
LineNumberInputStream使得程序能够按照行号读入数据,(用java语言制作编译器)
PushbackInputStream使得在读入过程中后退一个字符. (用java语言制作编译器?)
装饰模式和适配器模式都是包裹模式 wrapper pattern
1.12 ok代理模式Proxy
? ? ? ?
代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用 适配器模式就是这种通信间接化思想的体现。
装饰模式也是一个利用了中间对象来增强对象功能的模式 代理有一下几种: ? 远程代理 ? ? ? ? ? ? ? ?
虚拟代理
Copy On Write 代理 保护代理 Cache代理 防火墙代理 同步化代理
? 只能引用代理、
在所有的代理模式中,虚拟代理,远程代理,只能引用代理,保护代理是最常见的代理模式。
代理模式涉及的角色
? 抽象主题角色Subject ? ?
代理主题角色ProxySubject 真实主题角色RealSubject
?
代理模式是怎样工作的:
? 代理主题不改变主题接口,用户感觉不到代理的存在 ? ?
代理使用委派将客户端的调用委派给真实的主题对象 ? 换言之,代理起到传递请求的作用.
代理可以在传递请求之前之后作一些操作.而不是单纯传递请求
? ? 代理模式将一个中间层插入到客户端和主题角色之间,从而提供了许多的灵活性 代理模式和适配器模式 ?
适配器模式改变对象的接口。而代理模式并不改变对象的接口,这一点上有明显的区别
?
代理模式和装饰模式
? 装饰模式与所装饰的对象具有相同的接口。 ? 装饰模式为所装饰的对象提供新的功能。而代理模式为对象的使用施加控制。并不
提供对象本身的增强功能。 代理模式和门面模式
? 有时候,门面模式兼任代理的责任。这时候又叫代理门面模式。 举例
? java.lang.reflect.Proxy的使用 ?
spring
? ?
1.13 享元模式Flyweight
用的很少.不管它
享元模式:以共享的方式,高效的支持大量的细粒度对象.
Java中,String类型就使用了享元模式.在JVM内部.String对象都是共享的. String对象是不变对象,一旦创建出来就不能改变.
享元对象可以用不变模式来实现.
单纯享元模式,复合享元模式.
1.14 ok门面模式
?
什么是门面模式
? 外部与一个子系统的通信,必须通过一个统一的门面对象进行.这就是门面模式 ? ? ? ?
对一个子系统,通常只有一个门面类.并且只有一个门面类的实例
通过继承一个门面类,而在子系统中增加行为,这是错误的.医院的接待员不能给病人提供新的按摩服务
如果一个系统有好几个子系统,每个子系统可以有自己的一个门面类。 ?
门面模式举例: ? 医院 ? ?
政府办事机关。
好处
? 将客户端和系统内部的复杂性分开,客户端只需要和门面对象打交道。而不需要和子系统内部的对象打交道。 角色
? 门面 ? 子系统
在什么情况下使用门面类?
? 为一个复杂子系统提供一个简单的客户端调用的接口 ? ?
获得子系统的独立性和可移植性。
? 简化子系统的层次化结构
Session 门面模式,是J2EE模式的一种.实际上也是门面模式在j2ee框架中的应用
?
?
1.15 桥梁模式
不常用
JDBC驱动器.DriverManager,桥梁模式的例子
耦合,就是两个实体的行为的某种强关联
强关联,就是编译时已经确定的,无法在运行期动态改变的关联
共分享92篇相关文档