(十)装饰器模式详解(与IO不解的情缘)

本文详细探讨了装饰器模式,一种在不修改原类文件和使用继承的情况下,动态扩展对象功能的设计模式。重点阐述了其在JAVA IO中的应用,通过类图和代码示例展示了如何创建和使用装饰器,强调了装饰器模式的灵活性和组合优于继承的特性。
摘要由CSDN通过智能技术生成

                 作者:zuoxiaolong8810(左潇龙),转载请注明出处。

                 LZ到目前已经写了九个设计模式,回过去看看,貌似写的有点凌乱,LZ后面会尽量改进。

                 那么本章LZ和各位读友讨论一个与JAVA中IO有着不解情缘的设计模式,装饰器模式。

                 定义:装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

                 这一个解释,引自百度百科,我们注意其中的几点。

                 1,不改变原类文件。

                 2,不使用继承。

                 3,动态扩展。

                 上述三句话一语道出了装饰器模式的特点,下面LZ给出装饰器模式的类图,先上图再解释。


                  从图中可以看到,我们装饰的是一个接口的任何实现类,而这些实现类也包括了装饰器本身,装饰器本身也可以再被装饰。

                  另外,这个类图只是装饰器模式的完整结构,但其实里面有很多可以变化的地方,LZ给出如下两条。

                  1,Component接口可以是接口也可以是抽象类,甚至是一个普通的父类(这个强烈不推荐,普通的类作为继承体系的超级父类不易于维护)。

                  2,装饰器的抽象父类Decorator并不是必须的。

                 那么我们将上述标准的装饰器模式,用我们熟悉的JAVA代码给诠释一下。首先是待装饰的接口Component。

package com.decorator;

public interface Component {

	void method();
	
}

                 接下来便是我们的一个具体的接口实现类,也就是俗称的原始对象,或者说待装饰对象。

package com.decorator;

public class ConcreteComponent implements Component{

	public void method() {
		System.out.println("原来的方法");
	}

}

                 下面便是我们的抽象装饰器父类,它主要是为装饰器定义了我们需要装饰的目标是什么,并对Component进行了基础的装饰。

package com.decorator;

public abstract class Decorator implements Component{

	protected Component component;

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

	public void method() {
		component.method();
	}
	
}

                  再来便是我们具体的装饰器A和装饰器B。

package com.decorator;

public class ConcreteDecoratorA extends Decorator{

	public ConcreteDecoratorA(Component component) {
		super(component);
	}
	
	public void methodA(){
		System.out.println("被装饰器A扩展的功能");
	}

	public void method(){
		System.out.println("针对该方法加一层A包装");
		super.method();
		System.out.p
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值