• java实现23种设计模式之装饰模式


    package com.ceshi6;
    
    public interface Sourceable {
        public void method();
    }
    package com.ceshi6;
    
    public class Source implements Sourceable{
    
        @Override
        public void method() {
            System.out.println("这是原方法!");
        }
    
    }
    package com.ceshi6;
    
    public class Decorator implements Sourceable{
        
        private Sourceable source;
        
        public Decorator(Sourceable source){
            super();
            this.source = source;
        }
        @Override
        public void method() {
            System.out.println("装饰器之前!");
            source.method();
            System.out.println("装饰器之后!");
        }
    
    }
    package com.ceshi6;
    
    public interface DecoratorTest {
        public static void main(String[] args) {
            Sourceable source = new Source();
            Sourceable obj = new Decorator(source);
            obj.method();
        }
    }

    结果:

    有上可知,当多个类继承相同的接口,实现的方法是不一样的。其中方法可以被拓展成多个功能。

    这种方式也是属于java三大特性(封装,继承,多态)之一的多态。

    装饰器模式的应用场景:
    1、需要扩展一个类的功能。
    2、动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)

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

    在这里还要提到的一点就是,如果是使用抽象类或者类作为父类的话,子类是可以建一个新的方法,但是在使用

     Sourceable source = new Source();的时候,

    假设Sourceable 是抽象类,在source实例化之后事实上就是向上转型,但是子类中的新建的方法是不能调用的。

    跟上面没有关系,只是想到了这一点。

  • 相关阅读:
    [BFS]luogu P2536 [AHOI2005]病毒检测
    AtCoder Regular Contest 116 总结
    NOI online 2021 #1 总结
    博客半复活
    vue2 Bus兄弟组件间传值问题:重复触发和首次未触发
    ant design中table组件的filter,如何在外部控制
    ant design vue 日期排序
    什么是断点续传?前端如何实现文件的断点续传
    主vue前端面试题补充
    P4248 [AHOI2013]差异 题解
  • 原文地址:https://www.cnblogs.com/zhengyuanyuan/p/10748932.html
Copyright © 2020-2023  润新知