最新公告
  • 新注册用户请前往个人中心绑定邮箱以便接收相关凭证邮件!!!点击前往个人中心
  • java设计模式-装饰者模式

    模式定义

    动态的将新功能附加到对象上,在对象功能扩展方面,它比继承更有弹性。

    设计原则

    1. 多用组合,少用继承
    2. 类应设计的对扩展开放,对修改关闭。

    UML类图

    装饰者模式实例

    先写一个被装饰者食物的类
    被装饰者-食物类
    /**
    * 被装饰者-食物类
    */
    public class Food {
    private String foodName;
       public Food() {
    }
    public Food(String foodName) {
    this.foodName = foodName;
       }
    public String make() {
    return foodName;
       }

    }

    再定义几个装饰者类
    装饰者-面包类
    /**
    * 装饰者-面包类
    */
    public class Bread extends Food {
    private Food food;
       public Bread(Food food) {
    this.food = food;
       }
    public String make() {
    return food.make() + “+面包”;
       }
    }
    装饰者-奶油类
    /**
    * 装饰者-奶油类
    */
    public class Cream extends Food {
    private Food food;
       public Cream(Food food) {
    this.food = food;
       }
    public String make() {
    return food.make() + “+奶油”;
       }

    }

    装饰者-蔬菜类
    /**
    * 装饰者-蔬菜类
    */
    public class Vegetable extends Food {
    private Food food;
       public Vegetable(Food food) {
    this.food = food;
       }
    public String make() {
    return food.make() + “+蔬菜”;
       }
    }
    测试装饰者模型
    public class DecoratorDemo {
    public static void main(String[] args) {
    Food food = new Bread(new Vegetable(new Cream(new Food(“香肠”))));
           System.out.println(food.make());
       }

    }

    运行结果
    香肠+奶油+蔬菜+面包
    Process finished withexit code 0
    这就相当于生活当中制作三明治的过程,我们先加一根香肠,再香肠上抹上一层奶油,再加上几片蔬菜,最后拿面包夹上。

    java.io中的装饰者模式

    总结

    装饰者模型就是动态地添加更多功能的一种方式,是一种组合和委托的思想,但是会导致设计中出现许多小类,如果过度使用,会让程序变得很复杂,难以看明白。
    本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
    极客文库 » java设计模式-装饰者模式

    常见问题FAQ

    如果资源链接失效了怎么办?
    本站用户分享的所有资源都有自动备份机制,如果资源链接失效,请联系本站客服QQ:2580505920更新资源地址。
    如果用户分享的资源与描述不符怎么办?
    可以联系客服QQ:2580505920,如果要求合理可以安排退款或者退赞助积分。
    如何分享个人资源获取赞助积分或其他奖励?
    本站用户可以分享自己的资源,但是必须保证资源没有侵权行为。点击个人中心,根据操作填写并上传即可。资源所获收益完全归属上传者,每周可申请提现一次。
    如果您发现了本资源有侵权行为怎么办?
    及时联系客服QQ:2580505920,核实予以删除。

    参与讨论

    • 134会员总数(位)
    • 3731资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 339稳定运行(天)

    欢迎加入「极客文库」,成为原创作者从这里开始!

    立即加入 了解更多
    成为赞助用户享有更多特权立即升级