装饰者模式

        在日常开发过程中,往往会碰到需要对已有类的方法附加额外的功能但不破坏原有逻辑.(因为有可能这个类的方法被多处调用,而其中一处需要额外的功能).此时,我们就可以用到装饰着模式.

public class DecoratorPatternDemo {

    public static void main(String[] args) {

        System.out.println("包装前......");
        IProgrammer juniorProgrammer = new JuniorProgrammer();
        juniorProgrammer.showMe();

        System.out.println("=================");

        System.out.println("包装后......");
        JuniorProgrammerWrapper juniorProgrammerWrapper = new JuniorProgrammerWrapper(juniorProgrammer);
        juniorProgrammerWrapper.showMe();
    }
}


interface IProgrammer{
    void showMe();
}


/**
 * 被装饰者
 */
class JuniorProgrammer implements IProgrammer{

    @Override
    public void showMe(){
        System.out.println("精通增删改查");
    }
}

/**
 * 装饰者
 */
class JuniorProgrammerWrapper implements IProgrammer{

    private IProgrammer iProgrammer;


    public JuniorProgrammerWrapper(IProgrammer iProgrammer) {
        this.iProgrammer = iProgrammer;
    }

    @Override
    public void showMe() {

        System.out.println("熟读spring源码,高并发问题不在话下");
        //.....balabala....  额外的功能
        iProgrammer.showMe();
        System.out.println("熟悉使用各种中间件,熟悉红黑树原理");
        //.....balabala...额外的功能
    }
}

输出:

包装前......
精通增删改查
=================
包装后......
熟读spring源码,高并发问题不在话下
精通增删改查
熟悉使用各种中间件,熟悉红黑树原理

JuniorProgrammer中的showMe可能被a,b,c三处调用,但是c需要在调用前后附加额外的功能(可能在以后会被d调用). 

装饰者可以代替被装饰者,使被装饰者始终可以保持着功能单一.某些情况,比如对第三方jar的类,因为jar中的类是class文件,我们可以对其中的类进行包装,附加额外的功能.此时用装饰者模式再合适不过了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值