美文网首页
装饰模式

装饰模式

作者: 爱我O就直说 | 来源:发表于2020-01-07 15:01 被阅读0次

    2020-01-07

    先看效果:

    
    //装饰模式 测试
    
    private void decorateTest() {
            System.out.println("——————————————————————————");
            //爱疯手机        
            Phone phone = new IPhone();
            phone.call();
            System.out.println("——————————————————————————");
            //彩铃手机
            Phone ringPhone = new RingPhoneDecorate(phone);
            ringPhone.call();
            System.out.println("——————————————————————————");
            //音乐手机
            Phone musicPhone = new MusicPhoneDecorate(phone);
            musicPhone.call();
            System.out.println("——————————————————————————");
            //又有彩铃,又有音乐的手机
            Phone ringMusicPhone = new MusicPhoneDecorate(ringPhone);
            ringMusicPhone.call();
            System.out.println("——————————————————————————");
    }
    
    
    ###输出结果:
    
    ——————————————————————————
    爱疯打电话
    ——————————————————————————
    彩铃响起
    爱疯打电话
    ——————————————————————————
    爱疯打电话
    音乐响起
    ——————————————————————————
    彩铃响起
    爱疯打电话
    音乐响起
    ——————————————————————————
    
    

    开始写:

    image
    /**
     * 手机接口
     */
    public interface Phone {
        void call();
    }
    
    /**
     * 爱疯手机
     */
    public class IPhone implements Phone {
    
        @Override
        public void call() { //基础功能:打电话
            System.out.println("爱疯打电话");
        }
    }
    
    到此,已有手机类,下面给手机定义装饰类

    抽象装饰类:

    /**
     * 手机装饰类
     */
    abstract class PhoneDecorate implements Phone {
        private Phone phone;
    
        /**
         * 给手机装饰,所以要传手机
         *
         * @param phone 被装饰的手机
         */
        public PhoneDecorate(Phone phone) {
            this.phone = phone;
        }
    
        @Override
        public void call() {
            this.phone.call();
        }
    }
    

    具体装饰类:

    /**
     * 彩铃装饰
     */
    public class RingPhoneDecorate extends PhoneDecorate {
        /**
         * 给手机装饰,所以要传手机
         *
         * @param phone 被装饰的手机
         */
        public RingPhoneDecorate(Phone phone) {
            super(phone);
        }
    
        @Override
        public void call() {
            System.out.println("彩铃响起");
            super.call();
        }
    }
    
    /**
     * 音乐装饰
     */
    public class MusicPhoneDecorate extends PhoneDecorate {
        /**
         * 给手机装饰,所以要传手机
         *
         * @param phone 被装饰的手机
         */
        public MusicPhoneDecorate(Phone phone) {
            super(phone);
        }
    
        @Override
        public void call() {
            super.call();
            System.out.println("音乐响起");
        }
    }
    

    完事儿

    相关文章

      网友评论

          本文标题:装饰模式

          本文链接:https://www.haomeiwen.com/subject/qviractx.html