设计模式——装饰模式

概念

装饰模式:动态地给一个对象添加一些额外的职责。

Component是一个抽象的类,定义了对象接口。 ConcreteComponent是子类,定义了具体的方法的实现。

Decorator是继承自Component的抽象类,维护了一个Component的对象引用,并且实现了基类Component的功能。

ConcreteDecoratorA继承自Component,会执行基类Decorator的功能(也就是Component的功能),并执行本类的功能,相当于对Component进行了装饰。增加的功能可以是成员变量或方法等。

不同的Decorator类可以有不同的功能,对其装饰的对象进行包装。而且由于它们都是继承自component类,所以可以进行多层包装,像人可以穿上多件衣服,每一层包装就像加上了一层衣服。每个Decorator类只需要关注自己实现的功能即可。

代码实现

Component定义一个对象接口,ConcreteComponent是具体的要被装饰的类。

package decorator;

abstract public class Component {
	public abstract void operation();
}

class ConcreteComponent extends Component{
	public void operation() {
		System.out.println("Component operation");
	}
}

两种不同的装饰类分别增加不同的功能。

package decorator;

abstract public class Decorator extends Component {
	protected Component component;
	public void setComponent(Component component) {
		this.component = component;
	}

}

class ConcreteDecoratorA extends Decorator{
	public void operation() {
		component.operation();
		System.out.println("DecoratorA operation");
	}
}

class ConcreteDecoratorB extends Decorator{
	public void operation() {
		component.operation();
		System.out.println("DecoratorB operation");
	}
}

定义一个要被装饰的类,进行了两层包装。

package decorator;

public class DecoratorTest {

	public static void main(String[] args) {
		ConcreteComponent component = new ConcreteComponent();
		ConcreteDecoratorA a = new ConcreteDecoratorA();
		a.setComponent(component);
		
		ConcreteDecoratorB b = new ConcreteDecoratorB();
		b.setComponent(a);
		b.operation();
				
	}

}

实现了被包装类和两个装饰类中要实现的功能。 

Component operation
DecoratorA operation
DecoratorB operation

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值