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

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();
		
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值