设计模式-装饰模式

装饰模式的UML类图

在这里插入图片描述

你会发现,在装饰模式中,除了对抽象接口的实现,更重要的还有对抽象接口的聚合。
装饰模式一般适应于常为系统已有的功能动态的添加更多的功能
在这里插入图片描述
1、将会更新的功能的进行抽象

package decorate_1;
public interface Component {
	public void opration();
}

2、原有功能实现

package decorate_1;
public class ConcreteComponent implements Component {
	@Override
	public void opration() {
		System.out.println("原有功能");
	}
}

3、将要附加装饰进行抽象

package decorate_1;
//为子类提供模板
public abstract class Decorator implements Component{
	Component base = null;
	@Override
	public void opration() {
		if(base != null){
			base.opration();
		}
	}
	public void setComponent(Component base){
		this.base = base;
	}
}

4、具体装饰类A

package decorate_1;
public class ConcreteDecoratorA extends Decorator {
	private String addedState;
	@Override
	public void opration() {
		super.opration();	//先运行原有的operation()
		//...下面为本类自带的特殊逻辑和其他具体操作
		this.addedState = "abc";
		System.out.println("ConcreteDecoratorA operations");
	}
	public void printState(){	//该自带的特殊方法
		System.out.println(this.addedState);
	}
}

5、具体装饰类B

package decorate_1;
public class ConcreteDecoratorB extends Decorator {
	@Override
	public void opration() {
		super.opration();
		this.otherOperation();
	}
	public void otherOperation(){
		System.out.println("ConcreteDecoratorB operations");
	}
}

6、Main客户端

package decorate_1;
public class Main {
	public static void main(String[] args) {
		ConcreteComponent concreateComponent = new ConcreteComponent();
		ConcreteDecoratorA cda = new ConcreteDecoratorA();
		ConcreteDecoratorB cdb = new ConcreteDecoratorB();
		//装饰
		cda.setComponent(concreateComponent);
		cdb.setComponent(cda);
		//开始执行
		cdb.opration();
	}
}

使用装饰模式的一个例子

装饰模式就像穿衣服,如穿衣服需要先穿内裤,再穿上衣或者裤子,或者再加个外套, 比如哪天你不想穿外套,或者在外套外再加层风衣,穿衣的方式是多样的。
如:
将Person作为ConcreteComponent,其中show()显示姓名。
Component接口中抽象出show()方法。
将穿衣服、裤子、鞋子抽象成Decorator,并具体实现ConcreteDecorator。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值