结构型——Decorator(装饰模式)

Decorator 模式动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator 模式相比生成子类更为灵活。JAVA类库IO设计就采用Decorator 模式。

Decorator模式UML图

 

对于客户端来说,ConcreateComponent与Decorator的行为是一样的。可以在Decorator及子类中添加不同的行为。

源码如下:

public interface Work {

	void insert();
}

 

 

实现类:

 

public class SimpleWork implements Work {

	public void insert(){
		System.out.println("simple insert");
	}
}

 

 

装饰类:

public class DecoratorWork implements Work {

	private Work work;
	
	public DecoratorWork(Work work){
		this.work = work;
	}
	
	public void insert() {

		work.insert();
	}
	


}

 具体装饰类:

public class ConCreateDecorator extends DecoratorWork {

	public ConCreateDecorator(Work work) {
		super(work);
	}
	public void insert(){
		insertB();
		
		super.insert();
		insertA();
	}

	public void insertB(){
		System.out.println("B insert");
	}
	
	public void insertA(){
		System.out.println("A insert");
	}
}

 

测试类:

public class Test {

	public static void main(String[] args) {
		Work work = new SimpleWork();
		Work work1 = new DecoratorWork(work);
		work1.insert();		//---1
		
		work.insert();		//---2 与1中输出结果一致
		
		Work work2 = new ConCreateDecorator(work);
		work2.insert();//添加了新的行为
	}
}

 

结果为:

simple insert
simple insert
B insert
simple insert
A insert

 

 在上例中不难发现,DecoratorWork 类实现了Work类,但是在DecoratorWork 类里又把Work类作为它的一个属性,这是为什么呢?

    这是因为继承能使类型保持一致,而我们要灵活的使用类的行为则需要使用组合。

java.io包中就使用了些模式

我们可以继承FilterInputStream,并在自己的类中加入行为。装饰它

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值