`
saviorzuo
  • 浏览: 19769 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

设计模式 - 装饰器模式

 
阅读更多
Decator定义:动态的给一个类添加一些职责

package org.savior.decorator;

abstract class Beverage {
	abstract String getDescription();
	abstract double getCost();
}

class HouseBlend extends Beverage{

	@Override
	double getCost() {
		return 10.00;
	}

	@Override
	String getDescription() {
		return "HouseBlend咖啡";
	}
	
}

class Espresson extends Beverage{

	@Override
	double getCost() {
		return 20.00;
	}

	@Override
	String getDescription() {
		return "Espresson咖啡";
	}
	
}

class Decorator extends Beverage{
	private Beverage beverage;
	
	public Decorator(Beverage beverage){
		this.beverage = beverage;
	}
	
	@Override
	double getCost() {
		return beverage.getCost();
	}

	@Override
	String getDescription() {
		return beverage.getDescription();
	}
	
}

class Milk extends Decorator{
	public Milk(Beverage beverage) {
		super(beverage);
	}
	
	double getCost() {
		double cost = super.getCost();
		return cost + 2.0;
	}
	
	String getDescription() {
		String des = super.getDescription();
		return des + "加牛奶";
	}
	
}

class Mocha extends Decorator{
	public Mocha(Beverage beverage) {
		super(beverage);
	}
	
	double getCost() {
		double cost = super.getCost();
		return cost + 5.0;
	}
	
	String getDescription() {
		String des = super.getDescription();
		return des + "加摩卡";
	}
	
}


class Client{
	public static void main(String[] args) {
		Beverage b =  new HouseBlend();
		Decorator d = new Mocha(b);
		System.out.println(d.getCost());
		System.out.println(d.getDescription());
	}
}


Beverage 是抽象组件,HouseBlend是具体组件
Decorator 是装饰器组件,Milk为具体装饰器


package org.savior.decorator;

import java.util.*;

public class Price {
	public static void main(String[] args) {
		Component c = new ConcreteComponent();
		
		prizeDecorator p =  new GroupPrizeDecorator(c);
		
		System.out.println(p.calPrize("王五"));
	}
}

/**
 * 测试数据 
 */
class TempDB{
	public static Map<String,Double> map = new HashMap<String,Double>();
	
	static{
		map.put("张三", 1000.0);
		map.put("李四", 2000.0);
		map.put("王五", 3000.0);
	}
}

/**
 * 计算奖金的组件接口
 */
abstract class Component{
	/**
	 * 奖金计算方法
	 * @param user
	 * @return
	 */
	public abstract double calPrize(String user);
}

class ConcreteComponent extends Component{
	
	public double calPrize(String user) {
		return 0;
	}
}


abstract class prizeDecorator extends Component{
	/*
	 * 被装饰的组件对象
	 */
	private Component component;
	
	public prizeDecorator(Component component){
		this.component = component;
	}
	
	public double calPrize(String user){
		/*
		 * 转掉组件的对象方法
		 */
		return component.calPrize(user);
	}
}

class GroupPrizeDecorator extends prizeDecorator{

	public GroupPrizeDecorator(Component component) {
		super(component);
	}
	
	public double calPrize(String user){
		double money = super.calPrize(user);
		
		double group = 0.0;
		
		for(double d : TempDB.map.values()){
			group += d;
		}
		
		return money + group;
	}
}
分享到:
评论

相关推荐

    java常用设计模式-装饰器模式

    Java 设计模式 - 装饰器模式 装饰器模式(Decorator Pattern)是一种结构性设计模式,它允许您在不影响同一类的其他对象的行为的情况下,静态或动态地向单个对象添加行为。该模式非常有用,当您想要在运行时添加或...

    设计模式-装饰器模式

    装饰器模式是一种结构型设计模式,它允许在不修改对象本身的情况下动态地为对象添加新的行为或职责。这种模式在软件工程中广泛应用,特别是在需要扩展已有功能而不影响原有代码结构时。在iOS开发中,装饰器模式同样...

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

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

    9.设计模式-装饰器模式1

    装饰器模式(Decorator Pattern)是一种结构型设计模式,它的核心思想是在不修改原有对象的前提下,通过包装(包裹)原对象并扩展其行为来增加功能。这种模式常用于在运行时动态地给对象添加新的职责,使得系统具有...

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

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

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

    1. **组件(Component)**:定义了对象的接口,也就是所有被装饰对象和装饰器对象必须共同遵循的公共行为。这个接口使得装饰者和被装饰的对象可以互换,实现了无缝对接。 2. **具体组件(Concrete Component)**:...

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

    结构型模式如适配器模式(Adapter)、装饰器模式(Decorator)和代理模式(Proxy),则关注如何组合和连接类与对象,以达到新的功能。行为型模式如观察者模式(Observer)、策略模式(Strategy)和访问者模式...

    设计模式 - 装饰模式(C++实例)

    在实现中,装饰器模式通常遵循以下步骤: 1. 定义组件接口。 2. 创建原始组件类,实现接口。 3. 创建装饰器类,包含对组件的引用,并实现组件接口。 4. 创建具体装饰器类,扩展装饰器类,添加新的行为。 5. 在客户端...

    设计模式-Java语言中的应用

    设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...

    23种设计模式--装饰模式

    装饰模式是一种结构型设计模式,它是面向对象设计中用来动态添加或修改对象功能的一种方法。在软件工程中,装饰模式允许我们向一个现有的对象添加新的行为或职责,同时又不改变其原有的结构,从而实现对类的功能扩展...

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

    4. **装饰器模式** - QT4的QProxyStyle和QCommonStyle可以看作装饰器模式的实例,它们允许开发者自定义控件的外观而无需修改原有代码。 5. **策略模式** - QT4的信号和槽可以视为一种策略,开发者可以根据需要连接...

    【Java设计模式-源码】装饰器模式:动态扩展类的功能

    ## 一、概述 装饰器模式允许在不修改对象现有... - 在面向对象编程中,装饰器模式是一种设计模式,它允许静态或动态地向单个对象添加行为,而不会影响同一类的其他对象的行为。装饰器模式通常对于遵循单一职责原则非

    设计模式--装饰模式

    装饰模式(Decorator Pattern)是一种结构型设计模式,其主要目的是在不改变对象自身的基础上,在运行时为对象添加新的行为或属性。它通过包装原有对象,而不是通过继承来扩展功能,从而提供了更大的灵活性,避免了...

    游戏设计3-装饰者模式-装备

    装饰者模式是面向对象设计中的一种行为设计模式,它允许在运行时动态地给对象添加新的职责或行为,而无需改变对象本身。在游戏设计中,装饰者模式常常被用来扩展角色、装备等对象的功能,使得游戏内容更加丰富且易于...

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

    代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法...装饰模式(Decorator Pattern)、迭代器模式(Iterator Pattern)、组合模式(Composite Pattern)、观察者模式(Observer Pattern)、责任链...

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

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

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

    设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题。这些模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师,通常被称为GoF(Gang of Four),在他们的经典著作...

    23设计模式之装饰器模式-前端篇.pptx

    在前端开发中,装饰器模式常用于实现AOP(面向切面编程),比如日志记录、性能监控、权限控制等功能。通过定义装饰器函数,可以在不侵入原代码逻辑的情况下,控制代码的执行流程。例如,可以创建一个`logDecorator`...

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

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

Global site tag (gtag.js) - Google Analytics