装饰者设计模式

       装饰者模式用来动态的给一个对象添加一些额外的职责。我们可以通过对一些功能的不同组合方式来创建不同的类,在这种情况下,使用装饰者设计模式是非常灵活且便捷的。


装饰者设计模式有四大角色:

(1) 抽象构建角色:定义一个抽象接口,来规范准备附加功能的类。
(2) 具体构建角色:将要被附加功能的类实现抽象构建角色接口。
(3) 抽象装饰者角色:持有对具体构建角色的引用并定义与抽象构建角色一致的接口。
(4) 具体装饰角色:实现抽象装饰者角色。负责为具体构建添加额外功能。

案列实现,需求是提供不同种类的咖啡,如加糖、加奶、加冰、加糖加奶等等,这些元素就是需要添加的额外功能。

先建立一个基础接口

/*
 * 创建基类接口Coffee,装饰者和被装饰者要实现这个接口
 */
public interface Coffee {
	
	String drink();
}

再建立一个需要被装饰的基础类
/*
 * 具体构建角色,也就是被装饰的类
 */
public class BlackCoffee implements Coffee{

	@Override
	public String drink() {
		return "纯咖啡";
	}
}


再建立一个抽象装饰者角色
/*
 * 抽象装饰者角色,持有具体构建者的引用
 */
public class Decorator implements Coffee{
	
	private Coffee coffee;
	
	public Decorator(Coffee coffee){
		this.coffee = coffee;
	}
	
	@Override
	public String drink() {
		return coffee.drink();
	}
}

两个具体的装饰功能类
/*
 * 具体装饰角色,实现增强的功能
 */
public class MilkBlackCoffee extends Decorator{
	
	public MilkBlackCoffee(Coffee coffee){
		super(coffee);
	}
	
	@Override
	public String drink() {
		return super.drink()+"加奶";
	}

}
/*
 * 具体装饰角色,实现增强的功能
 */
public class SugarBlackCoffee extends Decorator{
	
	public SugarBlackCoffee(Coffee coffee){
		super(coffee);
	}
	
	@Override
	public String drink() {
		return super.drink()+"加糖";
	}
}


通过不同功能之间的对象传递,就可以实现功能的叠加。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值