美文网首页
装饰模式

装饰模式

作者: 潜心之力 | 来源:发表于2020-08-09 17:38 被阅读0次

    一、模式简介

    定义:指在不改变现有对象结构的情况下,动态地给该对象增加功能,达到装饰效果。
    场景:当终极类增加功能时不能采用继承方式。当对象的功能要求可以动态地添加,也可以再动态地撤销。

    • 角色结构:
    • 抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。
    • 具体构件(Concrete Component)角色:实现抽象构件,通过装饰角色为其添加一些职责。
    • 抽象装饰(Decorator)角色:继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。
    • 具体装饰(ConcreteDecorator)角色:实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。

    二、模式实现

    以按键手机装饰后成为智能手机为例子

    public interface Phone { -> 抽象构件
        void action();
    }
    
    public class KeyPhone implements Phone { -> 具体构件
        @Override
        public void action() {
            System.out.println("按键手机可以打电话");
        }
    }
    
    public abstract class Decorator implements Phone { -> 抽象装饰
        private Phone phone;
    
        public Decorator(Phone phone){
            this.phone = phone;
        }
    
        @Override
        public void action() {
            this.phone.action();
            this.decoration();
        }
    
        protected abstract void decoration();
    }
    
    public class SmartPhone extends Decorator { -> 具体装饰
        public SmartPhone(Phone phone) {
            super(phone);
        }
    
        @Override
        protected void decoration() {
            System.out.println("智能手机可以玩游戏");
        }
    }
    

    装饰前后效果对比

    KeyPhone keyPhone = new KeyPhone();
    keyPhone.action(); -> 装饰前的功能
    
    SmartPhone smartPhone = new SmartPhone(keyPhone);
    smartPhone.action(); -> 装饰后的功能
    

    相关文章

      网友评论

          本文标题:装饰模式

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