zoukankan      html  css  js  c++  java
  • 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
             */
        }
    }
    
  • 相关阅读:
    [SHOI2015]自动刷题机
    【教程】AI画放射图
    AI画圆角矩形
    极限运动:街头极限单车,不只是牛逼!
    DPK750针式打印机驱动,750u.dll下载
    文艺青年必看的Ⅹ部心理电影
    C语言程序设计-第2章 算法-程序的灵魂
    C语言程序设计-第1章 程序设计和C语言
    20151127笔记
    20151125小概念
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5369823.html
Copyright © 2011-2022 走看看