`

设计模式之——装饰者模式

阅读更多
装饰者模式要点:

      1. 装饰着与被装饰者拥有共同的超类
      2. 继承的目的是实现类型的继承(从而实现行为的扩展)
      3. 行为扩展(最终目的)

场景: 拥有主体类型或业务逻辑,但又具有个性化的处理场景


举例: 不同的咖啡不同的价格,但是计算价格的模式是一样的

代码如下

/**
 * 超类 咖啡
 * @author john
 *
 */
public abstract class Coffe {
    //价格
	public abstract double cost();
}

/**
 * 摩卡咖啡(被装饰者)
 * @author john
 *
 */
public class MokaCoffe extends Coffe {

	@Override
	public double cost() {
		// TODO 自动生成的方法存根
		return 2.0;
	}

}

/**
 * Nes咖啡 被装饰者
 * @author john
 *
 */
public class NesCoffe extends Coffe {

	@Override
	public double cost() {
		// TODO 自动生成的方法存根
		return 3.0;
	}

}

/**
 * 调料组件(装饰者组件)
 * @author john
 *
 */
public abstract class CompentDecorate extends Coffe {

	@Override
	public abstract double cost();

}

/**
 * 奶油调料(装饰者)
 * @author john
 *
 */
public class MilkCondiment extends CompentDecorate {
    private Coffe coffe;
    
    public MilkCondiment(){
    	
    }
    
    public MilkCondiment(Coffe coffe){
    	this.coffe = coffe;
    }
	@Override
	public double cost() {
		// TODO 自动生成的方法存根
		return 0.2+coffe.cost();
	}

}

/**
 * 糖调料 (装饰者)
 * @author john
 *
 */
public class sugarCondiment extends CompentDecorate {
	private Coffe coffe;
	
	public sugarCondiment(){
		
	}
	
    public sugarCondiment(Coffe coffe){
    	this.coffe = coffe;
    }
    
	@Override
	public double cost() {
		// TODO 自动生成的方法存根
		return 0.1+coffe.cost();
	}

}

public class Test {
	public static void main(String[] args){
		//咖啡 2.0
		Coffe mokaCoffe = new MokaCoffe();
		//扩展行为(价格)
		
		//加牛奶的咖啡 0.2
		mokaCoffe = new MilkCondiment(mokaCoffe);
		
		System.out.println(mokaCoffe.cost());
		
		//加糖的咖啡 0.1
		mokaCoffe = new sugarCondiment(mokaCoffe);
		
		System.out.println(mokaCoffe.cost());
	}
}



//运行结果:
[img]

[/img]
  • 大小: 13.2 KB
分享到:
评论

相关推荐

    C#设计模式——装饰模式应用实例

    C#设计模式——装饰模式应用实例,开发一套图形界面构件库的框架实例。

    JAVA设计模式学习12——装饰器模式

    NULL 博文链接:https://alaric.iteye.com/blog/1911949

    设计模式——装饰模式

    NULL 博文链接:https://maidoudao.iteye.com/blog/1336072

    设计模式代码——c#

    C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...

    深入浅出设计模式三——Beverage实现(装饰者模式)

    NULL 博文链接:https://quicker.iteye.com/blog/607122

    Java设计模式 版本2

    对象的克隆——原型模式,复杂对象的组装与创建——建造者模式,不兼容结构的协调——适配器模式,处理多维度变化——桥接模式,树形结构的处理——组合模式,扩展系统功能——装饰模式,深入浅出外观模式,实现对象...

    Java设计模式-装饰者模式

    本章可以称为“给爱用继承的人一个全新的设计眼界”。我们即将再度探讨典型滥用问题。你将在本章学到如何使用对象组合的方式,做到在运行时装饰类。为什么呢?一旦你熟悉了装饰者的技巧...——《Head First 设计模式》

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

    书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...

    装饰者模式——Decorator

    NULL 博文链接:https://chuanwang66.iteye.com/blog/1325151

    java设计模式

    目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式

    设计模式精解 译者:熊节 程序员必看书籍之一 part2

    设计模式精解(Design Patterns Explained) ...如何实现关键模式——Strategy(策略)、Observer(观察者)、Bridge(桥接)、Decorator(装饰)等等。 共同点/变化点分析、设计模式以及它们如何帮助理解抽象类。

    Pattern-Decorator-Java:设计模式工作坊——装饰者模式

    您必须实现装饰器模式,以便可以在运行时添加提到的服务。 作为开发服务如何工作的示例,在运行时创建一个用加密和缓存装饰的 JSON 策略,以及一个带有日志记录的 XML 策略。 请记住,您必须提供源代码和详细说明所...

    装饰设计模式——RecyclerView添加头部和底部-附件资源

    装饰设计模式——RecyclerView添加头部和底部-附件资源

    design-pattern-java.pdf

    扩展系统功能——装饰模式(三) 扩展系统功能——装饰模式(四) 外观模式-Facade Pattern 深入浅出外观模式(一) 深入浅出外观模式(二) 深入浅出外观模式(三) 享元模式-Flyweight Pattern 实现对象的复用——...

    深入浅出设计模式(中文版)

    4.4DecoratorPattern(装饰模式) 125 4.4.1定义 125 4.4.2现实中的装饰模式——相架 126 4.4.3C#实例——图书馆中的项目 127 4.4.4Java实例——自定义JButton 131 4.4.5优势和缺陷 133 4.4.6应用情景 134 ...

    深入浅出设计模式(中文版电子版)

    4.4DecoratorPattern(装饰模式) 125 4.4.1定义 125 4.4.2现实中的装饰模式——相架 126 4.4.3C#实例——图书馆中的项目 127 4.4.4Java实例——自定义JButton 131 4.4.5优势和缺陷 133 4.4.6应用情景 134 ...

    24种设计模式介绍与6大设计原则

    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    设计模式精解-掌握设计模式

    本书从一个新的视角描述面向对象设计,将...\r\n 如何实现关键模式——Strategy(策略)、Observer(观察者)、Bridge(桥接)、Decorator(装饰)等等。\r\n 共同点/变化点分析、设计模式以及它们如何帮助理解抽象类。

    .NET中的设计模式——一步步发现装饰模式

    学习设计模式的基本目标是要用它,尤其是帮助那些有扎实的OOP基础,而对设计模式很困惑的人在设计中应用它。我不会为不同设计模式写很全面的参考,但我希望这些文章能让你入门。设计模式与特定的语言无关。虽然我用...

Global site tag (gtag.js) - Google Analytics