设计模式 - 装饰器模式

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;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值