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

    装饰模式


    设计原则:遵循迪米特、单一职责、开闭原则,破坏里氏替换,体现功能复用
    常用场景:一个类需要动态的添加功能,且这些功能可以相互叠加
    使用概率:99.99999%
    复杂度:中
    变化点:动态添加的功能或者说装饰器
    选择关键点:添加的功能是否需要动态组装
    逆鳞:无


    主要思想:
    创建装饰类继承或实现 需要被装饰类相同的父类或接口
    持有被装饰类实例
    调用被装饰类方法在前后可增加功能

    和代理模式的区别在于,理论上装饰模式不控制持有的对象,只是增加一些装饰
    代理模式理论上,被代理类是不可直接用的,持有代理对象,可控制其执行与否


    public interface MyInterface {
        public void do1();
        public void do2();
    }
    
    
    
    public class MyClass implements MyInterface {
        @Override
        public void do1() {
            System.out.println("my do1");
        }
    
        @Override
        public void do2() {
            System.out.println("my do2");
        }
    }
    
    
    public class MyDecrator implements MyInterface{
    
        private MyInterface myInterface;
    
        public MyDecrator(MyInterface myInterface) {
            this.myInterface = myInterface;
        }
    
        @Override
        public void do1() {
            System.out.println("装饰前1");
            myInterface.do1();
            System.out.println("装饰后1");
        }
    
        @Override
        public void do2() {
            System.out.println("装饰前2");
            myInterface.do2();
            System.out.println("装饰后2");
        }
    }
  • 相关阅读:
    Sublime Text 3065
    FBX .NET
    macbook pro的usb串口失效的的处理方法
    CMAKE使用
    Ctrl+Scroll改变所有Editor的缩放比例 (Code::Blocks)
    如何在Mac OSX 10.10上安装GDB
    yum安装指定(特定)版本(旧版本)软件包的方法
    MinGW: TOO MANY SECTIONS issue
    轻量级Image Library
    CodeLite的姿势
  • 原文地址:https://www.cnblogs.com/zhaojj/p/7772654.html
Copyright © 2011-2022 走看看