装饰器模式

Posted jiefangzhe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器模式相关的知识,希望对你有一定的参考价值。

package com.sxt.io;
/**
 * 模拟咖啡
 * 1、抽象组件:需要装饰的抽象对象(接口或抽象父类)
 * 2、具体组件:需要装饰的对象
 * 3、抽象装饰类:包含了对抽象组件的引用以及装饰着共有的方法
 * 4、具体装饰类:被装饰的对象
 * @author TW
 *
 */
public class DecorateTest02 
    public static void main(String[] args) 
        Drink coffee =new Coffee();
        Drink suger =new Suger(coffee); //装饰
        System.out.println(suger.info()+"-->"+suger.cost());
        Drink milk =new Milk(coffee);//装饰
        System.out.println(milk.info()+"-->"+milk.cost());        
        milk =new Milk(suger);//装饰
        System.out.println(milk.info()+"-->"+milk.cost());
    

//抽象组件
interface Drink
    double cost(); //费用
    String info(); //说明

//具体组件
class Coffee implements Drink
    private String name ="原味咖啡";
    @Override
    public double cost() 
        return 10;
    

    @Override
    public String info() 
        return name;
    
    

//抽象装饰类
abstract class Decorate implements Drink
    //对抽象组件的引用
    private Drink drink;
    public Decorate(Drink drink) 
        this.drink =drink;
    
    @Override
    public double cost() 
        return this.drink.cost();
    

    @Override
    public String info() 
        return this.drink.info();
        


//具体装饰类
class Milk extends Decorate

    public Milk(Drink drink) 
        super(drink);
    
    @Override
    public double cost() 
        return super.cost()*4;
    

    @Override
    public String info() 
        return super.info()+"加入了牛奶";
        


class Suger extends Decorate

    public Suger(Drink drink) 
        super(drink);
    
    @Override
    public double cost() 
        return super.cost()*2;
    

    @Override
    public String info() 
        return super.info()+"加入了蔗糖";
        

 

以上是关于装饰器模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之-装饰器模式

《设计模式》之装饰器模式

装饰器模式

装饰器模式:为啥我们需要抽象装饰器? [复制]

java设计模式之装饰器模式

浅谈设计模式:装饰器模式|中介模式|原型模式