• 设计模式--装饰者模式


    装饰模式

    装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象

    组成:

    • Component:给出一个抽象接口,以规范准备接收附加责任的对象。
    • Concrete Component:定义一个将要接收附加责任的类,需要被装饰的类。
    • Decorator:持有一个构件(Component)对象的实例,并实现一个与抽象构件接口一致的接口。
    • Concrete Decorator:负责给构件对象添加上附加的责任,具体的装饰类。

    优点:

    • 通过使用不同的装饰类以及装饰类组合以及装饰类的排列组合,可以创造出不同的行为组合。
    • 扩展新的行为较为容易,可扩展性强。 

    缺点:

      装饰模式会导致设计中出现许多小类,如果过度使用,会使程序变得很复杂。

    简化版:

    • 如果只有一个Concrete Component类而没有抽象的Component接口时,可以让Decorator继承Concrete Component。
    • 如果只有一个Concrete Decorator类时,可以将Decorator和Concrete Decorator合并。

    类图:

    代码实现:

    public interface Componet {
        public void operation();
    }
    public class DecreteComponet implements Componet {
        @Override
        public void operation() {
            System.out.println("Duck");
        }
    }
    public class Decorator implements Componet {
        Componet componet;
    
        public Decorator(Componet componet) {
            this.componet = componet;
        }
    
        @Override
        public void operation() {
            componet.operation();
        }
    }
    public class DecreteDecoratorA extends Decorator {
    
        public DecreteDecoratorA(Componet componet) {
            super(componet);
        }
    
        @Override
        public void operation() {
            //addbehaviorA(); 也可以放前面
            super.operation();
            addbehaviorA();
        }
    
        public void addbehaviorA(){
            System.out.println("can fly!");
        }
    }
    public class Client {
        public static void main(String[] args) {
            Componet componet = new DecreteComponet();
            Decorator decorator = new DecreteDecoratorA(componet);
            decorator.operation();
        }
    }

  • 相关阅读:
    用Sqoop实现数据HDFS到mysql到Hive
    hdfs的文件结构
    搭建Hadoop-1.2.1&hbase-0.94.17&hive-0.9.0&centos6.8_x64集群
    缩减表空间碎片
    MySQL8.0.12源码编译安装_centos7.3
    Mysql8.0.18的源码安装
    mysql5.7.31二进制安装_centos7
    个人windows开发环境风格
    linux shell中那些奇奇怪怪的语法
    关于上线的一些事儿
  • 原文地址:https://www.cnblogs.com/foreverYoungCoder/p/7804153.html
Copyright © 2020-2023  润新知