您的位置:首页 > 编程语言 > Java开发

大话设计模式3 装饰模式 的java代码实现

2014-08-10 14:43 591 查看
1,Person类(ConcreteComponent)

package yx.designpattern.decorator;

//Person类(ConcreteComponent)
public class Person {
private String name;

public Person(){

}

public Person(String name) {
this.name = name;
}

public void show(){
System.out.println("装扮者:"+this.name);
}

}


2,服饰类(Decorator)

package yx.designpattern.decorator;

//服饰类(Decorator)
public class Finery extends Person {
protected Person component;

//打扮
public void decorate(Person component){
this.component=component;
}

@Override
public void show() {
if(component!=null){
component.show();
}
}
}


3,具体服饰类(ConcreteFinery)

package yx.designpattern.decorator;

//具体服饰类(ConcreteFinery)
public class ConcreteFineryA extends Finery {
@Override
public void show() {
super.show();
System.out.println("已装扮服饰A");
}

}


package yx.designpattern.decorator;
//具体服饰类(ConcreteFinery)
public class ConcreteFineryB extends Finery {
@Override
public void show() {
super.show();
System.out.println("已装扮服饰B");
}

}


package yx.designpattern.decorator;
//具体服饰类(ConcreteFinery)
public class ConcreteFineryC extends Finery {
@Override
public void show() {
super.show();
System.out.println("已装扮服饰C");
}

}


package yx.designpattern.decorator;
//具体服饰类(ConcreteFinery)
public class ConcreteFineryD extends Finery {
@Override
public void show() {
super.show();
System.out.println("已装扮服饰D");
}

}


package yx.designpattern.decorator;
//具体服饰类(ConcreteFinery)
public class ConcreteFineryE extends Finery {
@Override
public void show() {
super.show();
System.out.println("已装扮服饰E");
}

}


4,客户端测试类

package yx.designpattern.decorator;

public class Test {
public static void main(String[] args) {
Person p1=new Person("小菜");
Finery f1=new ConcreteFineryA();
Finery f2=new ConcreteFineryB();
Finery f3=new ConcreteFineryC();

f1.decorate(p1);
f2.decorate(f1);
f3.decorate(f2);

f3.show();

Person p2=new Person("大鸟");
Finery f4=new ConcreteFineryD();
Finery f5=new ConcreteFineryE();

f4.decorate(p2);
f5.decorate(f4);

f5.show();

Person p3=new Person("路人");

f5.decorate(p3);//可以按照任何顺序,任何组合方案进行组合
f2.decorate(f5);
f4.decorate(f2);
f1.decorate(f4);
f3.decorate(f1);
f3.show();

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: