• 装饰模式


    1、简介

      装饰者模式又叫包装模式(wrapper),装饰者模式以对客户端透明的方式扩展对象的功能,是继承关系的一种替代方案。

      装饰者与被装饰者拥有共同的超类,继承的目的是继承类型,而不是行为。

     UML类图

      

    2、装饰者模式的各个角色

       2.1、抽象构件角色 :在下面例子中为Human抽象接口,目的是为了规范准备接收附加责任的对象

       2.2、具体构件角色 :在下面例子中为Decorator抽象类,这是准备接收附加责任的类

       2.3、装  饰  角   色 :在下面例子中为Decorator1、Decorator2

       2.4、被 装 饰 角 色:在下面例子中为WhatMe

    3、源代码

      3.1、抽象构件角色

     
    package Decorator;
    /**
     * ********************************************************  
    * @ClassName: Human 
    * @Description: 抽象构件角色
    *  
    **********************************************************
     */
    public interface Human {
         public void Say();
    }
     

      3.2、具体构件角色

     
    package Decorator;
    /**
     * ********************************************************  
    * @ClassName: Decorator 
    * @Description: 具体构件角色
    *  
    **********************************************************
     */
    public abstract class Decorator  implements Human{
        private Human human;
        
        public Decorator(Human human){
            this.human=human;
        }
    
        @Override
        public void Say() {
             human.Say();  
            
        }
    }
     

      3.3、装饰者1

     
    package Decorator;
    /**
     * ********************************************************  
    * @ClassName: Decotator1 
    * @Description: 装饰角色1
    *  
    **********************************************************
     */
    public class Decotator1 extends Decorator{
    
        public Decotator1(Human human) {
            super(human);
        }
        
        public void woman(){
            System.out.println("我是女人");
        }
        
        
        public void Say() {
            super.Say();
            woman();
        }
        
    }
     

      3.4、装饰者2

     
    package Decorator;
    /**
     * ********************************************************  
    * @ClassName: Decorator2 
    * @Description: 装饰者2
    *  
    **********************************************************
     */
    public class Decorator2 extends Decorator{
        
        public Decorator2(Human human) {
            super(human);
            // TODO Auto-generated constructor stub
        }
        public void person(){
            System.out.println("我是人");
        }
        
        public void Say() {
            super.Say();
            person();
        }
    }
     

      3.5、被装饰者

     
    package Decorator;
    /**
     * ********************************************************  
    * @ClassName: WhatMe 
    * @Description: 被装饰者 可以有一些初始装饰
    *  
    **********************************************************
     */
    public class WhatMe implements Human{
        public void Say(){
            System.out.println("我是什么");
        }
    
    }
     

      3.6、测试客户端

      

     
    package Decorator;
    /**
     * ********************************************************  
    * @ClassName: Client 
    * @Description: 装饰者模式测试类
    *  
    **********************************************************
     */
    public class Client {
    
        public static void main(String[] args) {
            WhatMe me = new WhatMe();
            Decorator decorator = new Decotator1(new Decorator2(me));
            decorator.Say();
        }
    }
     
  • 相关阅读:
    Make something people want
    POJ 3662 Telephone Lines (二分+Dijkstra)
    POJ 2010 Moo University
    HDU 6627 2017ACM/ICPC亚洲区域赛沈阳站 Rabbits
    HDU 6625 2017ACM/ICPC亚洲区域赛沈阳站 Little Boxes(高精度整数加法)
    Codeforces 877D Olya and Energy Drinks(BFS+剪枝)
    CodeForces 876B Divisiblity of Differences (数学水题)
    POJ 2139 Six Degrees of Cowvin Bacon (Floyd最短路)
    UESTC 1057 秋实大哥与花 (线段树)
    Linux安装Oh-my-zsh
  • 原文地址:https://www.cnblogs.com/lanblogs/p/15175298.html
Copyright © 2020-2023  润新知