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

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

  • 相关阅读:
    apache重写规则自动追加查询参数QSA
    错误代码2104:无法下载Silverlight应用程序。请查看Web服务器设置
    eclipse的shell相关插件
    二叉树及排序二叉树的相关操作汇总
    约瑟夫环
    c++ 输入一行字符串
    类对象做函数参数(传值和传引用)
    运算符重载(=和+)
    char型字符串(数组)与string型字符串 指针与引用
    一维和二维数组 动态内存分配
  • 原文地址:https://www.cnblogs.com/zhengyuanyuan/p/10748932.html
Copyright © 2011-2022 走看看