• 装饰设计模式


    核心思想

    装饰模式就是给一个对象动态的增加一些新的功能,

    装饰对象和被装饰对象实现同一个接口,

    装饰对象持有被装饰对象的实例。

    UML图

    //定义接口
    public interface Sourceable {  
    2.    public void method();  
    3.}  
    
    //被装饰者实现接口
    1.public class Source implements Sourceable {  
    2.  
    3.    @Override  
    4.    public void method() {  
    5.        System.out.println("the original method!");  
    6.    }  
    7.}  
    
    //装饰者实现接口,并持有被装饰者的实例
    1.public class Decorator implements Sourceable {  
    2.  
    3.    private Sourceable source;  
    4.      
    5.    public Decorator(Sourceable source){  
    6.        super();  
    7.        this.source = source;  
    8.    }  
    9.    @Override  
    10.    public void method() {  
    11.        System.out.println("before decorator!");  
    12.        source.method();  
    13.        System.out.println("after decorator!");  
    14.    }  
    15.}  
    
    //测试类:
    1.public class DecoratorTest {  
    2.  
    3.    public static void main(String[] args) {  
    4.        Sourceable source = new Source();  
    5.        Sourceable obj = new Decorator(source);  
    6.        obj.method();  
    7.    }  
    8.}  
    
    输出:
    
    before decorator!
    the original method!
    after decorator!
    View Code

    小结

    应用场景:

    1、需要扩展一个类的功能时使用。

    2、动态的为一个对象增加功能,而且还能动态撤销。

    (继承不能做到这一点,继承的功能是静态的,不能动态增删。)

    缺点:

    产生过多相似的对象,不易排错!

    this和super很像,this指向的是当前对象的调用,super指向的是当前调用对象的父类。类加载完毕,创建对象,父类的构造方法会被调用(默认自动无参),然后执行子类相应构造创建了一个子类对象,该子类对象还包含了一个父类对象。该父类对象在子类对象内部。this super只能在有对象的前提下使用,不能在静态上下文使用。

  • 相关阅读:
    springboot 搭建druid数据监控
    spring-boot编写简易mvc
    解决rabbitmq 开启启动报错
    intelij idea 使用maven打包报错 Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1
    php foreach循环引用的问题
    手把手编写hyperf JsonRpc demo
    centos8配置nfs教程本机系统mac
    Java基础的练习题
    Java——循环
    Java——数组
  • 原文地址:https://www.cnblogs.com/fanfusuzi/p/6832293.html
Copyright © 2020-2023  润新知