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

    模式定义

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

    设计原则

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

    UML类图

    image

    装饰者模式实例

    先写一个被装饰者食物的类

    被装饰者-食物类

    package com.wpx.decorator;
    
    /**
     * 被装饰者-食物类
     */
    public class Food {
        private String foodName;
    
        public Food() {
    
        }
    
        public Food(String foodName) {
            this.foodName = foodName;
        }
    
        public String make() {
            return foodName;
        }
    }
    
    

    再定义几个装饰者类

    装饰者-面包类

    package com.wpx.decorator;
    
    /**
     * 装饰者-面包类
     */
    public class Bread extends Food {
        private Food food;
    
        public Bread(Food food){
            this.food=food;
        }
    
        public String make(){
            return food.make()+"+面包";
        }
    }
    
    

    装饰者-奶油类

    package com.wpx.decorator;
    
    /**
     * 装饰者-奶油类
     */
    public class Cream extends Food {
        private Food food;
    
        public Cream(Food food) {
            this.food = food;
        }
    
        public String make() {
            return food.make() + "+奶油";
        }
    }
    
    

    装饰者-蔬菜类

    package com.wpx.decorator;
    
    /**
     * 装饰者-蔬菜类
     */
    public class Vegetable extends Food {
        private Food food;
    
        public Vegetable(Food food) {
            this.food = food;
        }
    
        public String make() {
            return food.make() + "+蔬菜";
        }
    }
    
    

    测试装饰者模型

    package com.wpx.decorator;
    
    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 with exit code 0
    

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

    java.io中的装饰者模式

    image

    总结

    装饰者模型就是动态地添加更多功能的一种方式,是一种组合和委托的思想,但是会导致设计中出现许多小类,如果过度使用,会让程序变得很复杂,难以看明白。

  • 相关阅读:
    遭遇未知.Net加密壳
    mscorjit的介绍,兼对某壳企业版的分析
    mscorwks.dll在.Net中的地位以及在.Net代码保护方面的应用
    浅谈DotNet 保护中的字符串加密技术
    谈anti ILdasm的原理以及anit 框架API的可行性
    .Net 反射脱壳机核心源代码
    基于Html5的移动应用开发经验总结:第一篇架构选型篇(上)
    Windows 远程桌面服务开启
    求小于一个数n的所有数的阶乘
    uva 490 Rotating Sentences
  • 原文地址:https://www.cnblogs.com/wupeixuan/p/8627913.html
Copyright © 2011-2022 走看看