设计模式(一)——装饰设计模式

最近准备面试,翻开设计模式,感觉好多都记得不太清晰了,所以在复习的同时,把整理的代码贴上来,方便以后自己复习,也方便其他人学习之用。

废话不多说,今天先来看看装饰设计模式,这个模式实际的开发中用处还是很多的,因为一个软件产品,在刚开始的时候具有的功能,可能需要进一步扩展,但是如果使用“继承”的方法,确实可以达到扩展功能的方法,但是这样的做法,由于JAVA的单继承特性而大打折扣,所以不建议使用“继承”关系来扩展某个类的功能,而装饰设计模式则巧妙的解决了这个问题,更加合理的扩展功能。下面我们就正式看看——装饰设计模式

先让大家看看装饰设计模式的类图关系,从总体上有个把握。

光说不练假把式,来个实例给大家看看吧:

接口构件:

package com.xdccl.zwj.DecoratorDesignPatterns;

public interface Component {
	//提供一个统一的接口给具体构件和装饰构件使用
	public void operation() ;
}
具体构件:

package com.xdccl.zwj.DecoratorDesignPatterns;

public class ConcreteComponent implements Component {
	//具体构件:实现Component接口,具体类的功能
	@Override
	public void operation() {
		System.out.println("Driving a car !");
	}

}
装饰类:

package com.xdccl.zwj.DecoratorDesignPatterns;

public class Decorator implements Component {
	//装饰类:持有一个接口的实例对象的引用,方便装饰构件向上访问
	private Component component ;
	public Decorator(Component component){
		this.component = component ;
	}
	@Override
	public void operation() {
		component.operation() ;
	}

}
装饰构件:

package com.xdccl.zwj.DecoratorDesignPatterns;

public class ConcreteDecorator extends Decorator {
	public ConcreteDecorator(Component component){
		super(component) ;		//这里是调用装饰类(该类的父类)的构造函数
	}
	public void operation(){
		//在程序中执行时,下面两个方法的顺序是顺序执行的,如果颠倒位置,输出的结果也会颠倒,即输出为:
			//In the Night !
			//Driving a car !
		super.operation() ;				//具体构件的方法
		this.addOperation() ;			//装饰类增加的方法
	}
	private void addOperation() {
		System.out.println("In the Night !");
	}
}
客户端程序:

package com.xdccl.zwj.DecoratorDesignPatterns;

public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Component com = new ConcreteComponent() ;
		Decorator dec = new ConcreteDecorator(com) ;
		dec.operation() ;
	}

}

执行的结果:

Driving a car !
In the Night !

OK,整个装饰设计模式就说完了,很简单吧,但是很基础,用处也是大打滴,也希望对大家有所帮助!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值