美文网首页
设计模式之装饰器模式

设计模式之装饰器模式

作者: HeloWxl | 来源:发表于2020-10-17 14:52 被阅读0次

    一个简单的实例(轻颜相机) 了解适配器模式

    • 今天心情非常不错,想发张自拍到朋友圈,但是没化妆。
      别慌,美颜相机帮你化妆。
      比如说 你想涂口红、涂眼影、画眉毛等等。


      image.png

    补妆这个操作,我们用代码如何完成?装饰器模式帮你

    1.抽象组件

    /**
    * @Description:  抽象组件
    */
    public interface Character {
       /**
       * @Description: 补妆
       */
       String touchUp();
    }
    

    2.装饰器

    /**
    * @Description: 装饰器
     *              1.抽象类
     *              2.实现抽象组件接口
     *              3.持有抽象接口的引用
    */
    public abstract class AbstractDecorate implements Character {
    
        /**
        * @Description: 定义私有的人物接口引用
        */
        private Character character;
    
        public AbstractDecorate(Character character){
            this.character = character;
        }
    
        /**
         * @Description: 补妆
         */
        @Override
        public String touchUp() {
            return this.character.touchUp();
        }
    }
    

    3.被装饰者

    /**
     * @Description: 被装饰者 女生
     */
    public class Girl implements Character{
    
        @Override
        public String touchUp() {
            return "我是个漂亮女生,我想发自拍,我要美颜 ";
        }
    }
    
    

    涂口红

    /**
    * @Description: 口红
    */
    public class Lipstick extends AbstractDecorate{
    
        public Lipstick(Character character) {
            super(character);
        }
    
        @Override
        public String touchUp() {
            return super.touchUp()+"+涂口红";
        }
    }
    

    画眉毛

    /**
     * @Description: 眉毛
     */
    public class EyeBrow extends AbstractDecorate{
    
        public EyeBrow(Character character) {
            super(character);
        }
    
        @Override
        public String touchUp() {
            return super.touchUp()+"+画眉毛";
        }
    }
    
    

    涂眼影

    /**
    * @Description: 眼影
    */
    public class EyeShadow extends AbstractDecorate{
        public EyeShadow(Character character) {
            super(character);
        }
    
        @Override
        public String touchUp() {
            return super.touchUp()+"+涂眼影";
        }
    }
    
    

    测试

    public class Test {
    
        public static void main(String[] args) {
            Character girl = new Girl();
            System.out.println(girl.touchUp());
    
            //todo 涂口红
            Character lipStickGirl = new Lipstick(girl);
            System.out.println(lipStickGirl.touchUp());
    
            //todo 画眉毛
            Character eyeBrowGirl = new EyeBrow(lipStickGirl);
            System.out.println(eyeBrowGirl.touchUp());
    
            //todo 涂眼影
            Character eyeShadowGirl = new EyeShadow(eyeBrowGirl);
            System.out.println(eyeShadowGirl.touchUp());
        }
    }
    
    

    打印结果:

    image.png

    下一篇:工厂模式

    相关文章

      网友评论

          本文标题:设计模式之装饰器模式

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