设计模式梳理——装饰模式

一、概述

       装饰模式(Decorator),动态的给一个对象添加额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 

二、UML图示

uml

三、编程实现

       该程序主要通过模拟饮料配料的功能实现。

1、饮品抽象类,其他类都继承该类。

public abstract class Drink {
    public String name;

    public String getDescription(){
        return name;
    }

    public abstract double cost();
}

2、饮品实现类

      2.1 咖啡

public class Coffee extends Drink {

    public Coffee(){
        name = "咖啡";
    }
    @Override
    public double cost() {
        return 15;
    }
}

2.2 茶

public class Tea extends Drink {

    public Tea(){
        name = "茶";
    }
    @Override
    public double cost() {
        return 20;
    }
}

3、配料抽象类

public abstract class ExtraAddings extends Drink{
    public abstract String getDescription();
}

4、配料实现类

4.1 加奶

public class Milk extends ExtraAddings {

    Drink drink;

    public Milk(Drink drink){
        this.drink = drink;
    }
    @Override
    public String getDescription() {
        return drink.getDescription()+"+牛奶";
    }

    public double cost(){
        return 3+drink.cost();
    }
}

4.2 加糖

public class Sugar extends ExtraAddings {

    Drink drink;

    public Sugar(Drink drink){
        this.drink = drink;
    }
    @Override
    public String getDescription() {
        return drink.getDescription() + "+糖";
    }

    public double cost(){
        return 2 + drink.cost();
    }
}

5、测试类

public class Test {

    public static void main(String[] args) {
        Drink drink1 = new Coffee();
        Drink drink2 = new Tea();
        Drink addMilk = new Milk(drink1);
        Drink addSugar = new Sugar(drink1);
        Drink addMilk2 = new Milk(drink2);
        Drink addSugar2 = new Sugar(drink2);
        Drink addAll1 = new Milk(addSugar);
        Drink addAll2 = new Sugar(addMilk2);
        System.out.println(addMilk.getDescription()+addMilk.cost());
        System.out.println(addSugar.getDescription()+addSugar.cost());
        System.out.println(addMilk2.getDescription()+addMilk2.cost());
        System.out.println(addSugar2.getDescription()+addSugar2.cost());
        System.out.println(addAll1.getDescription()+addAll1.cost());
        System.out.println(addAll2.getDescription()+addAll2.cost());
    }
}

结果:

咖啡+牛奶18.0
咖啡+糖17.0
茶+牛奶23.0
茶+糖22.0
咖啡+糖+牛奶20.0
茶+牛奶+糖25.0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值