• Java 装饰模式 (Decorator)


    装饰模式

    动态的将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的取代方案

    这里写图片描写叙述

    代码

    package gx.component;
    
    /**
     * 组件:装饰类和被装饰类 都要继承:为了类型保持一致
     * @author always
     *
     */
    public abstract class Component {
    
        public abstract void description();
        public abstract int cost();
    }
    
    
    package gx.component.impl;
    
    import gx.component.Component;
    
    
    /**
     * 装饰类的抽象类
     * @author always
     *
     */
    public abstract class  Decorator extends Component{
    
        protected Component component;
    }
    
    package gx.component.impl;
    
    import gx.component.Component;
    
    /**
     * 
     * 被包装的类
     * @author always
     *
     */
    public class Phone extends Component{
    
        public void description() {
            System.out.println("裸机");
        }
    
        public int cost() {
    
            return 1900;
        }
    
    
    }
    
    package gx.decorator.impl;
    
    import gx.component.Component;
    import gx.component.impl.Decorator;
    
    /**
     * 
     * 装饰1:给手机买个壳
     * @author always
     *
     */
    public class DaiKe extends Decorator{
    
        public DaiKe(){
    
        }
    
        public DaiKe(Component component){
            this.component=component;
        }
        public void description() {
            this.component.description();
            System.out.println("带了手机壳");
        }
    
        public int cost() {
            return 50+this.component.cost();
        }
    
    }
    
    package gx.decorator.impl;
    
    import gx.component.Component;
    import gx.component.impl.Decorator;
    
    /**
     * 
     * 装饰2:给手机贴个膜
     * @author always
     *
     */
    public class TieMo extends Decorator{
    
        public TieMo(){}
    
        public TieMo(Component component){
            this.component=component;
        }
    
        public void description() {
            this.component.description();
            System.out.println("贴了膜");
        }
    
        public int cost() {
            return 20+this.component.cost();
        }
    
    }
    
    

    測试类:

    package gx;
    
    import gx.component.Component;
    import gx.component.impl.Phone;
    import gx.decorator.impl.DaiKe;
    import gx.decorator.impl.TieMo;
    import junit.framework.TestCase;
    
    public class TestDecorator extends TestCase {
    
        public void testDecorator() {
    
            Component component = new TieMo(new DaiKe(new Phone()));
    
            component.description();
            System.out.println("价钱:" + component.cost());
            /*
             * 结果:
             *  裸机 
             *  带了手机壳
             *  贴了膜 
             *  价钱:1970
             */
        }
    }
    
  • 相关阅读:
    多线程频繁上锁同步还不如用单线程
    1分钟左右随机生成2000万行随机字符串
    语言:抽象,封装,底层,低级
    构建WDK驱动出现fatal error U1087: cannot have : and :: dependents for same target
    Cmake编译成静态库
    VMware虚拟机相关文件问题
    输出流重定向
    How can I let the compiled script depend on something dynamic
    应用服务攻击工具clusterd
    Kali Linux缺少ifconfig命令
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5369823.html
Copyright © 2020-2023  润新知