zoukankan      html  css  js  c++  java
  • 《大话设计模式》——装饰模式

    装饰模式优点:将类中原有的装饰功能移出,作为单独的一个或几个对象。简化了原有的类,同时又可以动态的为类增加某一项或某几项装饰,而不必修改原类。有效的把类的核心职责和装饰功能区分开来,并且去除相关类中重复的装饰逻辑。同时让类在某些特定的时候,才拥有某些特定的功能。

    常用场景:加密数据、过滤词汇。

    装饰模式中的角色可以分为:

    1、component:对象接口,可以对对象动态的添加装饰。是所有类的顶端接口。

    2、decorator:装饰类。是所有装饰对象的父类。在这里set和get被添加装饰的对象。

    3、concrete:具体的对象,可以被添加装饰。

    4、decoratorA:具体装饰类。类中有特有的装饰,可以添加给具体的对象。

    例子:

    component

    inteface Component {
        public void say();    
    }

    concrete

    public class Concrete implement Component {
        public void say(){
            System.out.println("我是Concrete");
        }  
    }

    decorator

    public class Decorator implement Component {
        private Component component;
    
        public Decorator(Component component){
            this.component = component;
        }
    
        public void setComponent(Component component){
            this.component = component;
        }
    
        public Component getComponent(){
            return component;
        }
    
        public void say(){
            if(component != null){
                component.say();
            }
        }
    }

    decoratorA

    public class DecoratorA extend Decorator {
        private void A(){
            System.out.println("我被装饰了方法A");
        }
    
        public void say(){
            super.say();
            A();
        }
    
    }

    客户端

    public static void main(String[] args) {
        Concrete c = new Concrete();
        DecoratorA d = new DecoratorA();    
    
        d.setComponent(c);
        d.say();
    }

    代码执行后,输出结果:

    我是Concrete
    我被装饰了方法A

    在装饰模式中,装饰类可以有多个,例如DecoratorB,DecoratorC,DecoratorD。这些装饰类可以被自由地动态地为对象增加某些功能,并且互不影响,且不影响原功能。

    如果用来被装饰的对象只有一种,则decorator类可以直接继承被装饰的对象。component不是必要存在的。

  • 相关阅读:
    shell 脚本编程学习
    LMH6505 vs AD8336
    ubuntu 8.04 NFS服务的配置(转)
    新博客开张了!
    基于ARMlinux环境下的音频系统开发
    可恶的英语考试
    转HashTable(C#)
    我的手机3300
    高效注册DLL控件 让你的IE浏览器复活
    学习.NET2.0随笔
  • 原文地址:https://www.cnblogs.com/yxth/p/7374256.html
Copyright © 2011-2022 走看看