装饰模式

动态的给一个对象添加一些额外的职责,就增加功能而言,装饰模式比生成子类更灵活;

Demo:实现对一个人的装扮功能,要求记录穿衣的顺序

public abstract class Human {
    public abstract void show();
}
//具体实现类,被修饰对象,小白
public class Xiaobai extends Human {
    @Override
    public void show() {
        Log.d("meee","小白");
    }
}
//装饰父类,需要只需要修饰一次,那么可以不需要
public class Decoration extends Human {
    Human people;
    public void setPeople(Human human){
        people=human;
    }
    @Override
    public void show() {
        if (people!=null){
            people.show();
        }
    }
}
//装饰实现类
public class XizhuangDecoration extends Decoration{
    @Override
    public void show() {
        Log.d("meee","穿西装的");
        super.show();
    }
}
public class NiuzaikuDecoration extends Decoration{
    @Override
    public void show() {
        Log.d("meee","穿牛仔库的");
        super.show();
    }
}
//调用者
        Xiaobai xiaobai = new Xiaobai();
        XizhuangDecoration xizhuangDecoration = new XizhuangDecoration();
        NiuzaikuDecoration niuzaikuDecoration = new NiuzaikuDecoration();
        xizhuangDecoration.setPeople(xiaobai);
        niuzaikuDecoration.setPeople(xizhuangDecoration);
        niuzaikuDecoration.show();
//实现效果        
11-07 23:20:46.733 2105-2105/com.junx.designpattem D/meee: 穿牛仔库的
11-07 23:20:46.733 2105-2105/com.junx.designpattem D/meee: 穿西装的
11-07 23:20:46.733 2105-2105/com.junx.designpattem D/meee: 小白

使用场景

装饰模式是为已有功能动态的添加更多功能的一种方式.
这些新加的代码通常装饰了原有的类的核心行为.
在原有类中加入了新的字段 方法和逻辑,从而增加了主类的复杂度,这些新家的东西仅仅是为了满足一些只有有在某种特定情况下的特殊行为的需要.
装饰模式把每个要装饰的功能放在单独的类中,并让这个类去包装它要装饰的对象,从而实现当需要执行特殊行为的时候,客户可以有选择的有顺序的使用装饰功能包装对象

优点:
把类中的装饰功能从类中搬出出去,简化原有的类;
把核心职责和额外功能分开了,并且可以去除相关类中重复的逻辑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值