`

设计模式:装饰模式

 
阅读更多

 

JAVA 的IO模块如果不使用装饰模式,会需要更多的IO类,如带缓冲的并能读取基本类型的类、读取字节数组的缓冲类等等。

 

package com.test.decrator;

//抽象构件角色
public interface Component {
	public void dosometing();
}

 

package com.test.decrator;

//具体构件角色
public class ConcreteComponent implements Component {

	public void dosometing() {
		System.out.println("功能A");
	}

}

 

package com.test.decrator;

//装饰角色
public class Decorator implements Component {

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

}

 

package com.test.decrator;

//具体装饰角色1
public class ConcreteDecorator1 extends Decorator {

	public ConcreteDecorator1(Component component) {
		super(component);
	}
	
	public void dosometing() {
		super.dosometing();
		this.doAnotherthing();
	}
	
	private void doAnotherthing(){
		System.out.println("功能B");
	}
}

 

package com.test.decrator;

//具体装饰角色2
public class ConcreteDecorator2 extends Decorator {
	public ConcreteDecorator2(Component component) {
		super(component);
	}

	public void dosometing() {
		super.dosometing();
		this.doAnotherthing();
	}

	private void doAnotherthing() {
		System.out.println("功能C");
	}
}

 

package com.test.decrator;

public class Client {
	public static void main(String[] args) {
		//节点流
		Component component = new ConcreteComponent();
		//过滤流
		Component component2 =new ConcreteDecorator1(component);
		//过滤流
		Component component3 =new ConcreteDecorator2(component2);
		
		component3.dosometing();
	}
}

 

 

打印出

功能A
功能B
功能C

 

学IO最重要的是深刻理解装饰模式!

分享到:
评论

相关推荐

    设计模式:可复用面向对象软件的基础(非扫描版+高清)

    设计模式分为三类:创建型模式(如单例模式、工厂方法模式)、结构型模式(如代理模式、装饰器模式)和行为型模式(如观察者模式、策略模式)。每种模式都有其特定的用途和适用场景。 4. **具体设计模式详解** - ...

    设计模式:可复用面向对象软件的基础.zip

    8. 装饰模式(Decorator):动态地给一个对象添加一些额外的职责。装饰者模式可以用来扩展功能,而无需修改原有代码。 9. 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。代理模式常用于远程...

    《设计模式:可复用面向对象软件的基础》英文版

    ### 设计模式:可复用面向对象软件的基础 #### 书籍概述 《设计模式:可复用面向对象软件的基础》是一本由Erich Gamma、Richard Helm等四位国际知名的软件工程师共同编写的经典之作,该书提供了面向对象软件设计中...

    设计模式:基于C#的工程化实现及扩展(完整电子版)

    总之,《设计模式:基于C#的工程化实现及扩展》是一本对于C#开发者来说非常有价值的参考资料,它不仅讲解了设计模式的理论,还提供了丰富的实践案例,帮助读者掌握如何在实际项目中应用这些模式,提升软件开发的专业...

    设计模式:可复用面向对象软件的基础--详细书签版

     “[设计模式]在实用环境下特别有用,因为它分类描述了一组设计良好,表达清楚的面向对象软件设计模式。整个设计模式领域还很新,本书的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法...

    设计模式:可复用的面向对象软件的基础

    - 装饰模式:为游戏对象动态增加功能,如给角色动态增加装甲或魔法效果等; - 代理模式:用于控制对游戏资源的访问,如延迟加载或异步加载资源。 通过应用设计模式,游戏引擎开发者能够更好地实现软件的复用性、可...

    设计模式:可复用面向对象软件设计基础(附源码)

    设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。这些模式通过前人的经验总结,为开发人员提供了一种标准化的解决方案,使得代码更易于理解、扩展和维护。本资源《设计模式:可...

    1.《设计模式:可复用面向对象软件的基础(完整书签)》

    总的来说,《设计模式:可复用面向对象软件的基础》是一本深入理解和应用面向对象设计的必备书籍,它不仅介绍了23种核心设计模式,还提供了大量实例和解释,帮助读者将理论知识转化为实际的编程技巧。通过对这本书的...

    54-Spring设计模式之装饰器模式1

    Spring 设计模式之装饰器模式详解 在软件设计中,经常会遇到需要在不修改原有代码的情况下,添加新的功能或行为。这时,装饰器模式便可以发挥其作用。在 Spring 设计模式中,装饰器模式是非常重要的一种设计模式。 ...

    设计模式之装饰模式:以售卖咖啡为例

    在"设计模式之装饰模式:以售卖咖啡为例"的场景中,我们可以详细解析其应用。 首先,咖啡的选择过程可以看作是基础产品(Component),例如原味咖啡。客户可以选择的基础咖啡类型可能包括拿铁、卡布奇诺等,这些都...

    c# ,设计模式,装饰者模式,星巴兹咖啡

    装饰者模式是面向对象设计模式中的一个重要概念,它在C#等编程语言中广泛应用。这个例子以星巴克咖啡为例,展示了如何使用装饰者模式来灵活地扩展对象的功能,而无需修改原有代码。 装饰者模式的核心思想是动态地将...

    设计模式_基于C#的工程化实现及扩展_源码

    《设计模式:基于C#的工程化实现及扩展》是一份深入探讨软件设计模式的宝贵资源,它提供了C#语言下的具体实现与扩展,旨在帮助开发者提升代码的可读性、可维护性和可复用性。这个压缩包包含了多个源码文件,分别命名...

    设计模式--装饰者模式java例子

    装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有代码。在Java中,装饰者模式通常通过继承和组合来实现,它提供了一种比继承更灵活的方式来扩展对象的功能。...

    C#面向对象设计模式纵横谈(25):设计模式总结

    9. 装饰模式:装饰模式动态地给对象添加一些额外的职责,提供比继承更具有弹性的扩展方式。 10. 外观模式:外观模式为复杂的子系统提供了一个简单的接口,简化了客户端代码。 11. 享元模式:享元模式通过共享技术...

    设计模式可复用面向对象软件的基础 源码

    在《设计模式:可复用面向对象软件的基础》一书中,作者Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides(通常被称为GoF,Gang of Four)详细阐述了23种经典的设计模式。这些模式分为三类:创建型模式、...

    设计模式:可服用面向对象软件的基础

    4. 装饰模式:动态地给一个对象添加一些额外的职责,增加功能而不改变其原有结构。 5. 外观模式:为复杂的子系统提供一个简单的接口。 6. 享元模式:运用共享技术有效地支持大量细粒度的对象。 7. 代理模式:为其他...

    设计模式之装饰模式

    装饰模式是一种设计模式,它是结构型模式的一种,用于在运行时动态地给对象添加新的行为或职责。这种模式允许我们独立于对象的类来扩展其功能,而不必修改原有代码,实现了对对象的透明增强。装饰模式的核心在于,它...

    设计模式教材pdf 中文版

    - 装饰模式:动态地给对象添加一些额外的职责,为对象添加新的行为或属性而不改变其结构。 - 外观模式:提供一个统一的接口,用来访问子系统中的多个接口。 - 代理模式:为其他对象提供一种代理以控制对这个对象...

Global site tag (gtag.js) - Google Analytics