zoukankan      html  css  js  c++  java
  • Decrator 装饰模式

     

        

      注:装饰模式是结构型设计模式,动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。

     

        主要是利用组合代替继承来实现业务功能,对动态改变业务实现来说,相比更灵活。

     

        假如我们有一个工程,他有四个展示点,1、2、3、4,外国游客来考察,展示1、2、3比较好,领导来考察,展示2、3、4,下面来观看,展示1、2、4,比较好,这里我们就需要用到装饰模式,利用组合代替继承,动态改变展示效果。

     

    Java代码简单实现

    1,工程展示接口

     

    package com.pattern.structure.decrator;
    
     
    
    public interface Project {
    
     
    
    public void show() ;
    
    }

     

     

    2, 工程基本展示信息

     

    package com.pattern.structure.decrator;
    
     
    
    public class ConcreteProject implements Project {
    
     
    
    @Override
    
    public void show() {
    
     
    
    System.out.println("项目基本情况……");
    
    }
    
     
    
    }

     

     

    3,展示装饰抽象类

     

    package com.pattern.structure.decrator;
    
     
    
    public abstract class Decrator implements Project
    
    {
    
     
    
    private Project project ;
    
     
    
    public void setProject(Project project ) {
    
     
    
    this.project = project ;
    
    }
    
     
    
    @Override
    
    public void show() {
    
     
    
    if(project != null)
    
    project.show(); 
    
    }
    
     
    
    }

     

     

    4, 展示点 装饰类

     

    package com.pattern.structure.decrator;
    
     
    
    public class One extends Decrator {
    
     
    
    @Override
    
    public void show() {
    
     
    
    super.show();
    
    addShow(); 
    
    }
    
     
    
    private void addShow() {
    
    System.out.println("1 展示点展示……");
    
    }
    
     
    
    }

     

     

    5, 展示点 装饰类

     

    package com.pattern.structure.decrator;
    
     
    
    public class Two extends Decrator {
    
     
    
     
    
    public void show() {
    
     
    
    super.show(); 
    
    addShow(); 
    
    }
    
     
    
    private void addShow() {
    
     
    
    System.out.println("2  展示点展示……");
    
    }
    
    }

     

     

    6, 展示点 装饰类

     

    package com.pattern.structure.decrator;
    
     
    
    public class Three extends Decrator {
    
     
    
     
    
    public void show() {
    
     
    
    super.show(); 
    
    addShow(); 
    
    }
    
     
    
    private void addShow() {
    
     
    
    System.out.println("3 展示点展示……");
    
    }
    
    }

     

     

    7, 展示点 装饰类

     

    package com.pattern.structure.decrator;
    
     
    
    public class Four extends Decrator {
    
     
    
     
    
    public void show() {
    
     
    
    super.show(); 
    
    addShow(); 
    
    }
    
     
    
    private void addShow() {
    
     
    
    System.out.println("4 展示点展示……");
    
    }
    
    }

     

     

    8, 客户端代码

     

    package com.pattern.structure.decrator;
    
     
    
    public class Client {
    
     
    
    public static void main(String[] args) {
    
     
    
    // 外国考察团,1,2,3
    
    //ConcreteProject project = new ConcreteProject() ;
    
    //One one = new One() ;
    
    //Two two = new Two() ;
    
    //Three three = new Three() ;
    
    //
    
    //one.setProject(project);
    
    //two.setProject(one);
    
    //three.setProject(two);
    
    //
    
    //three.show(); 
    
     
    
     
    
    // 领导考察团,2,3,4
    
    //ConcreteProject project = new ConcreteProject() ;
    
    //Two two = new Two() ;
    
    //Three three = new Three() ;
    
    //Four four = new Four() ;
    
    //
    
    //two.setProject(project); 
    
    //three.setProject(two);
    
    //four.setProject(three);
    
    //
    
    //four.show();
    
     
    
     
    
    // 下面干事人员,1,2,4
    
    ConcreteProject project = new ConcreteProject() ;
    
    One one = new One() ;
    
    Two two = new Two() ;
    
    Four four = new Four() ;
    
     
    
    one.setProject(project);
    
    two.setProject(one);
    
    four.setProject(two);
    
     
    
    four.show();
    
     
    
    }
    
    }

     

     

     

    从上面代码可以看出,使用装饰器模式,动态改变展示效果。

     

     

     

    装饰模式通用类图

     

     

    ------

      文章只为技术交流学习,若所写有误,请斧正,评论或消息与我,为不误导后来学习的人;若有不小心所写侵权,请告知我;若转载,请注明出处。

     

     

     

     

     

     

     

  • 相关阅读:
    「NOTE」支配树
    「SOL」支配 (2021省选A卷)
    「SOL」矩阵游戏 (2021省选A卷)
    「SOL」最差记者2 (LOJ / JOISC2016)
    「SOL」Nondivisible Prefix Sums(AtCoder)
    「SOL」Spaceship(LOJ/USACO)
    「NOTE」可持久化非旋Treap
    「SOL」事情的相似度(LOJ)
    FTP(File Transfer Protocol)——文件传输协议详解
    DHCP(Dynamic Host Configutation Protocol)——动态主机配置协议详解
  • 原文地址:https://www.cnblogs.com/sten/p/3352099.html
Copyright © 2011-2022 走看看