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
    描述为:纯豆奶+黑豆+糖

  • 相关阅读:
    WordPress修改后台登录地址
    android开发之浅谈viewpager
    android开发之viewpager and Fragment
    android开发之 广播机制
    android开发之 SQLite(数据库)
    前端目标——天猫网页
    android 开发之Toast
    centos8 单机安装k8s
    mysql 查看库大小
    idea 常见问题
  • 原文地址:https://www.cnblogs.com/lpss-75074038/p/12037295.html
Copyright © 2011-2022 走看看