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
             */
        }
    }
    
  • 相关阅读:
    图形与文本
    Cookie处理函数练习
    jspSmartUpload上传下载全攻略
    SmartUpload 上传图片
    无下拉菜单
    servlet中使用SmartUpload组件实现上传
    乱码
    DIV+CSS 要兼容 IE8.0 应注意些什么?
    虚拟目录中的web.config不被上级目录的web.config影响的处理
    ASP.NET抓取页面源代码
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5369823.html
Copyright © 2011-2022 走看看