设计模式总结之装饰者模式


装饰者模式,角色主要由装饰者和被装饰者组成。

装饰者模式的设计原则就是多用组合少用继承合开闭原则。其动态的将职责添加到对象身上,如果需要扩展,则提供了比继承更加灵活的实现方式。

装饰者有如下特点:

1.装饰者和被装饰者有相同父类。

2.可以用一个或多个装饰者装饰被装饰者。

3.被装饰者可以在自己行为之前或之后添加装饰者的行为。

4.对象可以在任何时候被装饰,且动态装饰。

5.装饰模式使用的继承不是为了拓展,而是为了与更好的匹配类型。

Java中我们常见的Io类也是用的装饰者模式。

装饰者模式的类图如下:


可以举一个例子,比如一个游戏开发程序员,目前只会开发游戏,以后要给他拓展一些技能,就可以选择装饰者模式。

package com.java.decorator;

public interface Component {
	void doOperation();
}
package com.java.decorator;

public class Decorator implements Component{
	private Component component;
	

	public Decorator(Component component) {
		this.component = component;
	}


	@Override
	public void doOperation() {
		component.doOperation();
	}

}
package com.java.decorator;

public class ConcreteCompontent implements Component{

	@Override
	public void doOperation() {
		System.out.println("我是被装饰者,我会做游戏");
	}

}
package com.java.decorator;

public class BackGroundDecorator extends Decorator{

	public BackGroundDecorator(Component component) {
		super(component);
	}
	@Override
	public void doOperation() {
		super.doOperation();
		System.out.println("可以给你添加后台技能哦");
	}

}
package com.java.decorator;

public class OperationDecorator extends Decorator{

	public OperationDecorator(Component component) {
		super(component);
	}
	@Override
	public void doOperation() {
		super.doOperation();
		System.out.println("可以给你添加运营技能");
	}
}

package com.java.decorator;

public class Test {
	public static void main(String[] args) {
		Object object = new Object();
		Object b = object;
		System.out.println(object.hashCode());
		System.out.println(b.hashCode());

		ConcreteCompontent compontent = new  ConcreteCompontent();
		BackGroundDecorator backGroundDecorator = new BackGroundDecorator(compontent);
		backGroundDecorator.doOperation();
		OperationDecorator decorator = new OperationDecorator(backGroundDecorator);
		decorator.doOperation();
	}
	
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值