迭代器模式(Iterator Pattren)
定义:Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.(它提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节。)
一个没落的模式,基本上没人会单独写一个迭代器,除非是产品性质的开发。
迭代器模式(Iterator Pattren)
定义:Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.(它提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节。)
一个没落的模式,基本上没人会单独写一个迭代器,除非是产品性质的开发。
适配器模式(Adapter Pattern)
又叫做变压器模式。也叫做包装模式(Wrapper)。
定义:Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.(将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。)
适配器模式的优点:
适配器模式的使用场景:
适配器模式的注意事项:
策略模式(Sstategy Pattern)
也叫做政策模式(Policy Pattern)
定义:Define a family of algorithms, encapsulate each one, and make them interchangeable.(定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。)
策略模式的优点:
策略模式的缺点:
策略模式的使用场景:
装饰模式(Decorator Pattern)
定义:Attach additional responsibilities to an object dynamically keeping the same interface. Decorators provide a flexible alternative to subclassing for extending functionality.(动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。)
装饰类的作用也就是一个特殊的代理类。
装饰模式的优点:
装饰模式的缺点:
命令模式(command pattern)
定义:Encapsulate a request as an object, thereby letting you patameterize clients with different requests, queue or log requests, and support undoable operations.(将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。)
命令模式是一个高内聚的模式。
命令模式的优点:
命令模式的扩展:
命令模式(command pattern)
定义:Encapsulate a request as an object, thereby letting you patameterize clients with different requests, queue or log requests, and support undoable operations.(将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。)
命令模式是一个高内聚的模式。
命令模式的优点:
命令模式的扩展:
中介者模式(Mediator)
定义:Define an object that encapaulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interation independently.(用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。)
中介者模式的优点:
中介者模式的缺点:
中介者模式的实际应用:
以下情况尝试使用中介者模式:
原型模式(Prototype Pattern)
定义:Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype.(用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。)
简单程度仅次于单例模式和迭代器模式。
原型模式的优点:
原型模式的使用场景:
原型模式的注意事项:
一个实现了Cloneable并重写了clone方法的A,有一个无参构造或有参构造B,通过new关键字产生了一个对象S,在然后通过S.clone()方式产生了一个新的对象T,那么在对象拷贝时构造函数B是不会被执行的。
Object类提供的方法clone只是拷贝本对象,其对象内部的数组、引用对象等都不拷贝,还是指向原生对象的内部元素地址,这种拷贝就叫做浅拷贝。
使用原型模式时,引用的成员变量必须满足两个条件才不会被拷贝:一是类的成员变量,而不是方法内变量;二是必须是一个可变的引用,而不是一个原始类型或不可变对象。
深拷贝:对私有的类变量进行独立的拷贝。
深拷贝和浅拷贝建议不要混合使用。
对象的clone与对象内的final关键字是有冲突的。
代理模式(Proxy Pattern)
也叫委托模式,是一项基本设计技巧。
定义:Provide a surrogate or placeholder for another object to control access to it.(为其他对象提供一种代理以控制对这个对象的访问。)
代理模式的优点:
在实现阶段不用关心代理谁,而在运行阶段才指定代理哪一个对象。
Spring AOP是一个非常典型的动态代理。
代理类实现InvocationHandler
建造者模式(Builder Pattern)
也叫做生成器模式
定义:Separate the construciton of a complex object from its representation so that the same construction process can create different representations.(将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。)
建造者模式的优点:
建造者模式的使用场景:
建造者模式的注意事项: