Java设计模式(疯狂Java联盟版)
return body; }
public void setBody(String body) { this.b*dy = body; }
public String getFoot() { return foot; }
public void setFoot(String foot) { t*is.foot = foot; } }
public class Man extends Person { }
Test
publ*c class Test{
public static void main(String[] ar*s) {
PersonDirector pd = new PersonDirector();
Person person = pd.constructPerson(new ManBuilder()); System*out.println(person.getBody()); System.out.println(person.getFoot()); System.out.println(person.getHead()); } }
result
建造男人*身体 建造男*的脚 建造男人的头
1.1.4 单态模式
保证一个类仅有一个实例,*提供一个访问它的全局访*点。
适用性
1.当类只能有一个*例而且客户可以从一个众所周知的访问点访问它时。
11
Java设计模式(疯狂Java联盟版)
2.当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
参与者
Singleton
定义一个Instance操作,允许客户访问它的唯一实例。Instance是一个类操作。
可能负*创建它自己的唯一实例。
类图 例子 Singleton
public class Singleton {
private static Singleton sing;
private Singleton() { }
public st*tic Singleton get*nstance() { if (sing == null) {
sing = new Singleto*(); }
return sing; } }
Test
public class Test {
public static void *ain(*tring[] args) {
Singleton sing = Singleton.getInstance(); Singleton si*g2 = Singleton.getI*stance();
System.out.println(sing); System.out.pr*ntln(sing2); } }
result
12
Java设计模式(疯狂Java联盟版)
singleton.Singleton@1c78e57 singleton.Singleton@1c78e57
1.1.5 原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
适用性
1.当一个系统应该独立于它的产品创*、构成和表示时。
2.当要实例化的类是在运行时刻指定时,例如,通过动态装载。
3.为了避免创建一个与产品类层次平行的工厂*层次时。
4.当一个类的实例只能有几个不同状态组合中的一种时。
建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。
参与者
1. Prototype
声明一个克隆自身的接口。
2. ConcretePrototype
实现一个克隆自身的操作。
3. Client
让一个原型克*自身从而创建一个新的对象。
类图
例子 Prototype
13
Java设计模式(疯狂Java联盟版)
public class Prototype implements Cloneable {
private String name;
public void setName(String name) { this.name = name; }
public String getName() { return this.name; }
public Object clone(){ try {
return super.clone(); } catch (Exception e) { e.printStackTrace(); return null; } } }
ConcretePrototype
publ*c class ConcretePrototype extend* Prototype {
public ConcretePrototype(String name) { setName(name); } }
Client
public clas* Test {
public static void main(String[] args) {
Prototype pro = new ConcretePrototy*e(\ Prototype pro2 = (Prototype)pro.clone(); *ystem.out.println(pro.getName()*; System.out.println(pro2.getName()); } }
result
prototype
14
Java设计模式(疯狂Java联盟版)
prototype
1.2 结构型模式
Adapter * 适配器模式 * Bridge ( 桥接模* ) Composite ( 组合模式 ) Decorator ( 装*模式 ) Facade ( 外观模式 ) Flyweight ( 享元模式 ) Proxy ( 代理模式 )
1.2.1 适配器模式
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口*兼容而不能一起工作的那*类可以一起工作。
适用性
1.你想使*一个已经存在的类,而它的接口不符合你的需求。
2.你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那*接口
可能不一定兼容的类)协同工作。
*.(仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行
子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
参与者
1.Target
定义Client使用的与特定领域相关的接口。
2.Client
与符合Target接口的对象协同。
3.Adapt*e
定义一个已经存在的接口,这个接口需要适配。
4.Adapter
对Adaptee的接口与Target接口进行适配
15