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();
        }
    }

    输出结果:

    输出结果.

  • 相关阅读:
    浅析椭圆曲线加密算法(ECC)
    比特币原理——交易与UTXO
    比特币白皮书-学习笔记
    python SMTP邮件发送
    Linux : Forks()
    IS: [=Burp Suite No.4=]Burp Suite /Scanner/ and /Intruder/
    IS: [=Burp Suite No.3=]Burp Suite /Target/ and /Spider/
    IS: [=Burp Suite No.2=]Burp Suite SSL and advanced options
    IS: [=Burp Suite No.1=]Burp Suite install and configuration
    IS: WMIC command use
  • 原文地址:https://www.cnblogs.com/Actexpler-S/p/8179998.html
Copyright © 2011-2022 走看看