美文网首页
装饰者模式

装饰者模式

作者: 那就省略号吧 | 来源:发表于2020-03-09 16:28 被阅读0次

    装饰者模式:

    装饰者模式能在不改变原有对象的基础上动态的给一个对象添加一些额外的职能来拓展对象的功能

    结构图

    结构图.png

    简答来讲,我们需要一个主体(Component),并需要一些装饰类(Decorator)对主体进行一个装饰,主体也可以没有装饰类装饰;

    举例

    以去汉堡店套餐为例,现在想组一个汉堡套餐,首先定义一个抽象清单类,进行添加食品,计算价钱;

    public abstract class Menu {
        public abstract String add();
        public abstract Integer price();
    }
    

    汉堡套餐,汉堡作为一个主体:

    public class Hamburger extends Menu {
        @Override
        public String add() {
            return "一个鸡腿堡";
        }
    
        @Override
        public Integer price() {
            return 8;
        }
    }
    

    还需要为汉堡配一些小食,小食有很多,有可乐,薯条等,我们需要定义一个小食的父类,如果各个小食需要有特殊的功能,我们可以给将该父类定义成抽象类,可乐和薯条都继承该类:

    public class Refreshments extends Menu {
        private Menu menu;
    
        public Refreshments(Menu menu) {
            this.menu = menu;
        }
    
        @Override
        public String add() {
            return this.menu.add();
        }
    
        @Override
        public Integer price() {
            return this.menu.price();
        }
    }
    
    public class Cola extends Refreshments {
        public Cola(Menu menu) {
            super(menu);
        }
    
        @Override
        public String add() {
            return super.add()+" 一杯可乐";
        }
    
        @Override
        public Integer price() {
            return super.price()+6;
        }
    }
    
    public class Chips  extends Refreshments {
        public Chips(Menu menu) {
            super(menu);
        }
    
        @Override
        public String add() {
            return super.add()+" 一份薯条";
        }
    
        @Override
        public Integer price() {
            return super.price()+7;
        }
    }
    

    相关文章

      网友评论

          本文标题:装饰者模式

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