• 装饰模式


    简单理解,装饰模式是不更改原有的类,往这个类中动态添加新的功能。

    结构如图:

    按上图编写代码如下:

    Component:

    package cn.sasa.decorator;
    //定义一个接口
    //为一些对象动态添加职责
    public abstract class Component {
        public abstract void operation();
    }

    ConcreteComponent:

    package cn.sasa.decorator;
    
    public class ConcreteComponent extends Component{
    
        @Override
        public void operation() {
            System.out.println("具体对象的操作");
        }
    
    }

    Decorator:

    package cn.sasa.decorator;
    
    public class Decorator extends Component{
    
        protected Component component;
        
        public void SetComponent(Component component) {
            this.component = component;
        }
        
        @Override
        public void operation() {
            if(component!=null) {
                component.operation();
            }
        }
    
    }

    DecoratorA:

    package cn.sasa.decorator;
    
    public class DecoratorA extends Decorator{
        //本类独有的功能
        private String state="";
        
        public void operation() {
            super.operation();
            state="A---hi~";
            System.out.println("A功能:"+state);
        }
    }

    DecoratorB:

    package cn.sasa.decorator;
    
    public class DecoratorB extends Decorator{
    
        public void operation()
        {
            super.operation();
            action();
        }
        
        //装饰B独有的方法
        private void action() {
            System.out.println("B功能:B---hi~");
        }
        
    }

    测试类test:

    package cn.sasa.decorator;
    
    public class test {
    
        public static void main(String[] args) {
            ConcreteComponent concre = new ConcreteComponent();
            DecoratorA da = new DecoratorA();
            DecoratorB db = new DecoratorB();
            
            da.SetComponent(concre);
            db.SetComponent(da);
            db.operation();
        }
    
    }

    通过Decorator的setComponent()向需要装饰的具体类进行包装。每个装饰类只关注自己的功能,不需要关心如何被添加到对象链当中。

  • 相关阅读:
    (转)typedef用法
    (转)在用户空间发生中断时,上下文切换的过程
    (转)内核中断,异常,抢占总结篇
    (转)中断上下文和进程上下文的区别
    (转)C中的volatile用法
    (转)gcc学习笔记
    (转)C系程序员面试必知必会之大端小端
    (转)我在北京工作这几年 – 一个软件工程师的反省
    (转)忠告
    Linux下VLAN功能的实现 (转)
  • 原文地址:https://www.cnblogs.com/SasaL/p/10650551.html
Copyright © 2020-2023  润新知