装饰者设计模式(Decorator)

装饰者设计模式(Decorator)

装饰者设计模式你也可以称之为装饰器设计模式,反正你想叫啥叫啥,我这里习惯叫装饰者了。

有同学估计已经学的累了,心想,这个sb博主,怎么唠唠叨叨的还没写完呢,大家稍安勿躁,我都是讲解的精品设计模式,大家稍微有点耐心,学习不是一蹴而就的事情,大家共勉!

这里的装饰者模式就非常有意思了!这里我还是举个例子说明这个设计模式:

这样,大家都知道孙悟空吧,会七十二般变化,还能翻个跟头就十万八千里,假如今天孙悟空想变成条鱼,你说这条鱼能飞行十万八千里吗?当然可以,这里鱼只是外壳,实际上里面还是孙悟空,对吧,那你说假如让你用代码描述这件事情,你怎么说?鱼继承了孙悟空?明显不行,因为两个东西是两个物种,但是你说鱼能不能十万八千里,好像也还行,是不是这个问题就比较贱,比较棘手,但是这里我们使用装饰者模式就可以完美的解决这个问题。
咱们慢慢梳理一下这个问题,首先我问大伙,孙悟空能十万八千里,变成鱼也能吧,这里我们就提取一个共同点,就是这个Move类,没毛病吧老铁:

public interface Move {
     void fly();
}

然后主角登场了:

public class MonkeyKing implements Move{
    @Override
    public void fly() {
        System.out.println("孙悟空飞了十万八千里");
    }
}

主角孙悟空实现了并重写了Move接口,那么问题来了,鱼怎么写?继承孙悟空?绝对不行,这里就用到了装饰者模式,首先我们来看看代码怎么写:

public class Decorator implements Move{

    private MonkeyKing mk;

    public Decorator(MonkeyKing mk){
        this.mk = mk;
    }

    @Override
    public void fly() {
        System.out.println("孙悟空变成鱼,飞了十万八千里");
    }
}

这个就是装饰者模式,实现重写了Move接口,相当于一个壳子,里面有孙悟空飞十万八千里的功能,接下来我详细解释一下这个代码:首先大家明白,这个只是一个壳子,外壳是一只鱼,内核实际上是孙悟空,所以我们需要在这个类里面实例化出来这个孙悟空,并且写一个孙悟空的有参构造函数,到时候传进来是只鱼,你也是孙悟空,传进来是个屎壳郎,你也是孙悟空,你也能飞。

这里相当于把装饰者模式(就是一个特殊类)当成一个桥,把孙悟空接进来,放到这个伪装的壳里面去

然后我们看看鱼这个类怎么写:

public class Fish extends Decorator{
    public Fish(MonkeyKing mk){
        super(mk);
    }
}

鱼继承了装饰者,书写了一个构造函数,super调用父类方法,实现能飞的愿望。
大体就算完成了,我们主函数调用一下看一眼:

public class TestCase {
    public static void main(String[] args) {
        MonkeyKing mk = new MonkeyKing();
        mk.fly();

        Fish fish = new Fish(mk);
        fish.fly();
    }
}

主函数先实例化了一个孙悟空,一运行,能飞。
然后实例化一个鱼,把孙悟空这个实例传进去,一运行,神了!也能飞,这也许是最牛X的鱼了吧。
好了,装饰者模式大致也就是这样了。大家听懂了吗~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值