zoukankan      html  css  js  c++  java
  • Java设计模式之装饰者模式

    首先呢先引入一个小问题:

    想一下我们应该怎么实现它呢?

    一般的情况下 可以使用继承的方法去实现如图:

    这样的话很明显,类爆炸啦!有很多种组合,有没有更好的组合呢?下面就引入了装饰者模式

    下面看看它的类图:

    下面是具体的案例实现:

    //被装饰者的对象接口
    public interface Drink {
        public float cost();
        public String desc();
    }
    //具体的被装饰者
    public class Dounai implements Drink{
        @Override
        public float cost() {
            return 3f;
        }
        @Override
        public String  desc() {
            return "纯豆奶";
    
        }
    }
    //装饰者的基类
    public abstract class Decroator implements Drink  {
        private Drink drink; //要装饰的对象
    
        public Decroator(Drink drink) {
            this.drink = drink;
        }
    
        @Override
        public float cost() {
            return drink.cost();
        }
    
        @Override
        public String desc() {
          return  drink.desc();
        }
    }
    //具体的装饰者
    public class Blackdou extends Decroator {
        public Blackdou(Drink drink) {
            super(drink);
        }
    
        @Override
        public float cost() {
            return super.cost()+2f;
        }
    
        @Override
        public String desc() {
            return super.desc()+"+黑豆";
        }
    }
    //具体的装饰者类
    public class SugarDecroator extends Decroator {
        public SugarDecroator(Drink drink) {
            super(drink);
        }
        @Override
        public float cost() {
            return super.cost()+1f;
        }
        @Override
        public String desc() {
            return super.desc()+"+糖";
        }
    }
    public class Test {
        public static void main(String[] args) {
    
            Drink drink = new Dounai();
            Blackdou blacktang = new Blackdou(drink);
            SugarDecroator  sugar = new SugarDecroator(blacktang);
    
            System.out.println("这杯豆浆价格为:"+sugar.cost());
            System.out.println("描述为:"+sugar.desc());
        }
    }

    测试类的运行结果为:

    这杯豆浆价格为:6.0
    描述为:纯豆奶+黑豆+糖

  • 相关阅读:
    4.3.4 查询语法基础(2)
    4.3.4 查询语法基础(1)
    一个存储过程调用另一个存储过程 (2009-12-29 13:57:05)
    4.3.3 基于行的操作
    4.3.2 基于集合的操作
    4.3 数据操纵语言(DML)
    4.2 从哪儿开始
    子查询、联合查询和连接查询
    4.1 SQL的本质
    本书说明
  • 原文地址:https://www.cnblogs.com/lpss-75074038/p/12037295.html
Copyright © 2011-2022 走看看