`
dwlovehcy
  • 浏览: 33281 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式之三----装饰模式

 
阅读更多

java io中广泛应用到了装饰者模式

装饰者和被装饰对象有相同的超类型

你可以使用一个或多个装饰者包装一个对象

既然装饰者和被装饰对象有相同的超类型,所以在任何需要原始对象(被包装)的场合,可以用装饰过的对象代替它。

(关键点)装饰者可以在委托被装饰者的行为之前与/或之后,加上自己的行为,已达到特定的目的

对象可以在任何时候被装饰,所以可以在运行时动态的、不限量的使用你喜欢的装饰者来装饰对象

 

 

 

1 基类--饮料(抽象类)   描述和价格

package com.pattern;
/**
 * 
 * @author shasha
 * 饮料类
 */
public abstract class Beverage {

	String description ="unknown beverage";
	
	public String getDescription(){
		return description;
	}
	
	public abstract double cost();
}

 

 

2 装饰基类---调料  重写描述是为了在装饰的时候灵活加上描述

 

package com.pattern;
/***
 * 
 * @author duwan
 * 调料(装饰者基类)
 */
public abstract class CondimentDecorator extends Beverage{

	@Override
	//重写描述方法
	public abstract String getDescription();
	
}

  

3 两个饮料类 和 它们的三个装饰者

 

package com.pattern;
/***
 * 
 * @author shasha
 * 浓咖啡
 */
public class Espresso extends Beverage {

	@Override
	public double cost() {
		// TODO Auto-generated method stub
		return 1.49;
	}

	public Espresso(){
		description="Espressso";
	}
}


package com.pattern;

public class HouseBlend extends Beverage {

	@Override
	public double cost() {
		// TODO Auto-generated method stub
		return 1.99;
	}

	public HouseBlend(){
		description="HouseBlend Coffee";
	}
	
}


package com.pattern;

/***
 * 
 * @author shasha
 * 牛奶--调料装饰者
 */
public class Milk extends CondimentDecorator{

	//被装饰者
	Beverage beverage;
	public Milk(Beverage beverage){
		this.beverage=beverage;
	}
	@Override
	public String getDescription() {
		// TODO Auto-generated method stub
		return beverage.description+", Milk";
	}

	@Override
	public double cost() {
		// TODO Auto-generated method stub
		return 0.25+beverage.cost();
	}

}



package com.pattern;
/**
 * 
 * @author shasha
 * 摩卡是一个装饰者
 */
public class Mocha extends CondimentDecorator{

	Beverage beverage;
	
	public Mocha(Beverage beverage){
		this.beverage=beverage;
	}
	@Override
	public String getDescription() {
		// TODO Auto-generated method stub
		return beverage.getDescription()+",Mocha";
	}

	@Override
	public double cost() {
		// TODO Auto-generated method stub
		return 0.20+beverage.cost();
	}

}


package com.pattern;
/***
 * 
 * @author shasha
 * 大豆是一种调料装饰者
 */
public class Soy extends CondimentDecorator {

	Beverage beverage;
	
	public Soy(Beverage beverage){
		this.beverage=beverage;
	}
	@Override
	public String getDescription() {
		// TODO Auto-generated method stub
		return beverage.getDescription()+",Soy";
	}

	@Override
	public double cost() {
		// TODO Auto-generated method stub
		return 0.30+beverage.cost();
	}

}

 

 

4 开始装饰模式的测试

package com.pattern;
/**
 * 
 * @author shasha
 * 咖啡厅 来测试
 */
public class StarbuzzCoffee {

	public static void main(String[] args) {
		Beverage beverage=new Espresso();
		System.out.println(beverage.getDescription()+" $"+beverage.cost());
		
		Beverage beverage2=new HouseBlend();
		beverage2=new Mocha(beverage2);
		beverage2=new Mocha(beverage2);
		beverage2=new Soy(beverage2);
		System.out.println(beverage2.getDescription()+" $"+beverage2.cost());
		
	}
}

 

分享到:
评论

相关推荐

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 装饰模式(Decorator):动态地给一个对象添加一些额外的职责。 - 享元模式(Flyweight):使用共享对象,有效地支持大量细粒度的对象。 3. **行为型模式**:这类模式关注对象之间的责任分配。 - 责任链模式...

    java设计模式---诙谐易懂版

    设计模式一般分为三大类:创建型模式、结构型模式和行为型模式。 3. 根据文件内容,诸葛亮给赵云的三个锦囊妙计可以用策略模式来实现。每个妙计对应一个实现了策略接口的具体策略类。例如,BackDoor类实现了...

    设计模式专题之(七)装饰模式---设计模式装饰模式示例代码(python--c++)

    装饰模式是一种结构型设计模式,它允许在运行时动态地给对象添加新的行为或职责,同时保持对象的接口不变。这种模式使得我们可以在不修改原有代码的基础上,通过组合不同的装饰来扩展对象的功能,实现了代码的高可...

    Java设计模式----通俗易懂版

    这23种设计模式可以分为三类:创建型、结构型和行为型。 1. 创建型设计模式: - 单例模式:保证一个类只有一个实例,并提供全局访问点。 - 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类...

    设计模式---装饰者模式

    装饰者模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或职责,而无需修改对象的源代码或创建子类。这种模式的核心思想是通过将对象封装在一个装饰器对象内,来扩展对象的功能,同时保持原有接口的不变...

    HeadFirst 设计模式学习笔记3--装饰模式 Demo

    装饰模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式通常用于保持对象的原始类结构不变,同时增强其功能。HeadFirst 设计模式系列书籍以其生动有趣的插图和...

    设计模式之美——教你写出高质量代码

    "设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...

    26种设计模式-----pdf

    设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。创建型模式主要关注对象的创建过程,比如单例模式(Singleton)、工厂模式(Factory)和抽象工厂模式(Abstract Factory)。它们提供了一种在不指定...

    C++设计模式--基于Qt4开源跨平台开发框架

    《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象编程中最核心的设计原则之一。这些模式可以帮助开发者解决常见的编程问题,并提高代码的可复用性和可维护性。 #### 创建型模式 创建型模式关注的是对象...

    设计模式课件大全

    设计模式07-组合模式、装饰模式 设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式...

    23种 设计模式---面向对象的基本原则

    - 装饰模式(Decorator):动态地给一个对象添加一些额外的职责,提供比继承更灵活的功能扩展。 3. 行为型模式(Behavioral Patterns): - 责任链模式(Chain of Responsibility):避免将处理请求的发送者和...

    JAVA-设计模式-结构型模式-装饰模式

    JAVA-设计模式-结构型模式-装饰模式

    c++设计模式-结构型模式-装饰器模式

    c++设计模式-结构型模式-装饰器模式;QT工程;c++简单源码; 装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。

    C++设计模式-基于QT4开源跨平台开发框架 源码

    设计模式分为三大类:创建型模式(如单例、工厂方法、抽象工厂)、结构型模式(如代理、装饰器、适配器)和行为型模式(如观察者、策略、命令)。这些模式都是在特定上下文中解决设计问题的模板,它们可以提高代码的...

    设计模式-装饰者模式

    在“设计模式—装饰者模式”中,我们将深入探讨这个模式的概念、实现方式以及实际应用。 装饰者模式的核心概念在于“装饰”(Decorator)和“组件”(Component)。组件是被装饰的基本对象,它可以是接口或者抽象类...

    JAVA设计模式--程序设计--反射--注解--泛型

    设计模式包括创建型模式(如单例、工厂方法、抽象工厂等)、结构型模式(如适配器、装饰器、代理等)和行为型模式(如策略、观察者、职责链等)。这些模式提供了良好的可复用性和可扩展性,帮助开发者遵循“开闭原则...

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    GoF(Gang of Four)所提出的23种设计模式被视为面向对象设计的核心内容之一。本文旨在深入解析这些设计模式,并通过C++实现来帮助读者更好地理解和应用这些模式。 #### 1. 创建型模式 创建型模式关注的是对象的...

Global site tag (gtag.js) - Google Analytics