zoukankan      html  css  js  c++  java
  • 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实例化之后事实上就是向上转型,但是子类中的新建的方法是不能调用的。

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

  • 相关阅读:
    Scala的基本类型和操作
    spark-submit部署应用的相关参数详解
    Spark的相关概念说明和检查点机制
    解决网站需要cookies登录和内容需要动态加载问题
    python 多线程
    re
    echarts中的图表大小自适应
    git过滤提交文件
    响应式媒体
    爬过的坑
  • 原文地址:https://www.cnblogs.com/zhengyuanyuan/p/10748932.html
Copyright © 2011-2022 走看看