zoukankan      html  css  js  c++  java
  • 装饰模式(Decorator)

    一、装饰模式的类图如下

    下载

    在装饰模式中的角色有:

      ●  抽象构件(Component)角色:就是需要装饰者的基类

      ●  具体构件(ConcreteComponent)角色:具体需要装饰的实例类

      ●  装饰(Decorator)角色:装饰物/装饰物 的基类

      ●  具体装饰(ConcreteDecorator)角色:具体装饰物类

    话不多说,先看实例:

    二、装饰模式具体实例

    待装饰类的基类:

    /**
     * 人
     */
    public interface People {
        public void speak();
    }

    具体待装饰类   ,中国人一出生就说汉语,   在人生旅途中也需要学习多种语言来装饰自己

    /**
     *
     * 中国人类   实现people
     * 重写speak()方法 , 中国人说汉语
     */
    public class Chinese implements People {
        @Override
        public void speak() {
            System.out.println("中国娃说汉语");
        }
    }

    装饰物/装饰品 的基类  --此处装饰类  为语言

    /**
     * 装饰类
     * 语言基类
     */
    public class Language implements People {
        private People people;
    
        public Language() {
        }
    
        public Language(People people) {
            this.people = people;
        }
    
        @Override
        public void speak() {
            people.speak();
        }
    }

    具体装饰类1:    装饰自我  - - 学习英语

    /**
     * 具体装饰类1
     * 学习说英语
     */
    public class English extends Language{
    
        public English(People people) {
            super(people);
            people.speak();
        }
    
        @Override
        public void speak() {
            System.out.println("学会说英语");
        }
    }

    具体装饰类2    装饰自我  - - 学习法语

    /**
     * 具体装饰类2
     * 学习说法语
     */
    public class French extends Language{
        public French(People people) {
            super(people);
            people.speak();
        }
    
        @Override
        public void speak() {
    
            System.out.println("学会说法语");
        }
    }

    具体装饰类3    装饰自我  - - 学习德语

    **
     * 具体装饰类
     * 学习说德语
     */
    public class German extends  Language{
        public German(People people) {
            super(people);
            people.speak();
        }
    
        @Override
        public void speak() {
            System.out.println("学会说德语");
        }
    }

    测试类:

    public class main {
        public static void main(String[] args) {
            People people  =  new Chinese();
           /* People people1 = new English(people);
            People people2 = new French(people1);
            people2.speak();*/
           People zhangsan = new English(new French(new German(people)));
           zhangsan.speak();
        }
    }

    输出结果:

    输出结果.

  • 相关阅读:
    Sql2000存储过程分页
    扇贝网页记单词插件
    notepad++正则替换保留原内容
    给 QuickTime 播放器添加快进x秒,快退x秒
    谷歌浏览器隐私设置错误 NET::ERR_CERT_AUTHORITY_INVALID 攻击者可能会试图从 xx 窃取您的信息(例如:密码、通讯内容或信用卡信息)。
    Java实体映射工具MapStruct 与BeanUtils性能比较
    阿里DDD项目最佳实践-COLA 架构总览
    Java实体映射工具MapStruct详解
    Martin Fowler大神
    领域模型的核心本质是什么?
  • 原文地址:https://www.cnblogs.com/Actexpler-S/p/8179998.html
Copyright © 2011-2022 走看看