装饰模式

package com.test.design.decorator;

public abstract class Component {

	public abstract void operate();
}


 

package com.test.design.decorator;

public class BaseComponent extends Component {

	@Override
	public void operate() {
		System.out.println("执行相关操作...");
	}

}


 

package com.test.design.decorator;
//装饰类,可以是抽象类(其他装饰类可以继承该类)
public class Decorator extends Component {
	
	private Component component;
	
	public Decorator(Component component){
		this.component = component;
	}

	@Override
	public void operate() {
		
		//can do something else
		System.out.println("操作前可增加一些操作。。");
		
		this.component.operate();
		
		System.out.println("操作前后也可增加一些操作。。");
		
		//can do something else
	}

}


 

package com.test.design.decorator;

public class Client {

	public static void main(String[] args) {
		Component component = new BaseComponent();
		Decorator decorator = new Decorator(component);
		decorator.operate();
	}
}


Component 是一个接口或者是抽象类,就是定义我们最核心的对象,也就是最原始的对象。在装饰模式中,必然有一个被提取出来最核心、最原始、最基本的接口或抽象类。

装饰模式是对继承的有力补充,你要知道继承可不是万能的,继承可以解决实际的问题,但是在项目中你要考虑诸如易维护、易扩展、易复用等,而且在一些情况下你要是用继承就会增加很多了类,而且灵活性非常的差,那当然维护也不容易了,也就是说装饰模式可以替代继承,解决我们类膨胀的问题,你要知道继承是静态的给类增加功能,而装饰模式则是动态的给增加功能。

装饰模式还有一个非常好的优点,扩展性非常好,在一个项目中,你会有非常多因素考虑不到,特别是业务的变更,时不时的冒出一个需求,特别是提出一个令项目大量延迟的需求时候,那种心情是…,真想骂娘!装饰模式可以给我们很好的帮助,通过装饰模式重新封装一个类,而不是通过继承来完成,简单点说,三个继承关系Father,Son,GrandSon 三个类,我要再Son 类上增强一些功能怎么办?我想你会坚决的顶回去!不允许,对了,为什么呢?你增强的功能是修改Son 类中的方法吗?增加方法吗 ?对GrandSon的影响哪?特别是GrandSon 有多个的情况,你怎么办?这个评估的工作量就是够你受的,所以这个是不允许的,那还是要解决问题的呀,怎么办?通过建立SonDecorator 类来修饰Son,等于说是创建了一个新的类,这个对原有程序没有变更,通过扩充很好的完成了这次变更。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值