码迷,mamicode.com
首页 > 其他好文 > 详细

装饰器模式

时间:2019-08-06 10:36:52      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:--   装饰类   接口   extend   code   rac   extends   private   rate   

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()+"加入了蔗糖";
    }    
}

 

装饰器模式

标签:--   装饰类   接口   extend   code   rac   extends   private   rate   

原文地址:https://www.cnblogs.com/jiefangzhe/p/11307381.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!