设计模式学习笔记之装饰器模式

所谓装饰器模式,即可以灵活的为已有的功能添加新的功能。具体的实例如下:

有一个变形金刚的抽象类:

package com.DesginPolicyLearn.Decorate;
/*
 * author:Tammy Pi
 * function:变形金刚的抽象类
 */
public abstract class Transformer {
	
	public abstract void show();
}

此变形金刚的抽象类具有一个装饰器,为它添加装备。

package com.DesginPolicyLearn.Decorate;
/*
 * author:Tammy Pi
 * function:变形金刚的装饰类
 */
public class TransformerDecorator extends Transformer{

	protected Transformer transformer;
	
	public void setComponent(Transformer comp) {
		
		this.transformer = comp;
	}
	
	public void show() {
		
		if(this.transformer!=null){
			
			this.transformer.show();
		}
	}
}

有两种装备的变形金刚。一个是带翅膀的变形金刚。

package com.DesginPolicyLearn.Decorate;
/*
 * author:Tammy Pi
 * function:带翅膀的变形金刚
 */
public class WingTransformer extends TransformerDecorator{

	public void show() {
		
		System.out.println("带翅膀");
		super.show();
	}
}

一个是带武器的变形金刚:

package com.DesginPolicyLearn.Decorate;
/*
 * author:Tammy Pi
 * function:带武器的变形金刚
 */
public class WeaponTransformer extends TransformerDecorator{

	public void show() {
		
		System.out.println("带武器");
		super.show();
	}
}

这样我们就可以用装饰器灵活的为变形金刚上装备了:

package com.DesginPolicyLearn.Decorate;
/*
 * author:Tammy Pi
 * function:测试装饰模式
 */
public class TestDecorator {

	public static void main(String[] args){
		
		TransformerDecorator trans1 = new WingTransformer();
		TransformerDecorator trans2 = new WeaponTransformer();
		trans1.setComponent(trans2);
		trans1.show();
	}
}

有了装饰器模式,我们还可以用新的子类继承至TransformerDecorator,可以扩展出三只眼睛的变形金刚、披着斗篷的变形金刚。灵活的将它们组装在一起。

装饰器模式,将类的核心职责和装饰功能分开了。我们将装饰功能写在装饰器类中,其他类继承它,不用再理会装饰方法。这样就使得装饰方法得以重用,去除类中重复的装饰逻辑。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值