装饰模式

装饰模式(Decorator:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活

类图:

代码:

publicabstractclass Componet {

    publicabstractvoid Operation();

}

publicclass ConcreteComponet extends Componet {

    @Override

    publicvoid Operation(){

       System.out.println("特定操作");

    }

}

publicabstractclass Decorator extends Componet {

    protected Componet componet;

    publicvoid setComponet(Componet componet){

       this.componet=componet;

    }

}

publicclass ConcreteDecoratorA extends Decorator {

    @Override

    publicvoid Operation() {

       if(componet!=null){

           System.out.println("记录日记_A");

           componet.Operation();

       }

    }

}

publicclass ConcreteDecoratorB extends Decorator{

    @Override

    publicvoid Operation() {

       if(componet!=null){

           System.out.println("读取记录_B");

           componet.Operation();

       }

    }

}

publicstaticvoid main(String[] args) {

       //创建装饰者和被被装饰者

       Componet base=new ConcreteComponet();

       Decorator d1=new ConcreteDecoratorA();

       Decorator d2=new ConcreteDecoratorB();

       //随意添加装饰

       d1.setComponet(base);

       d2.setComponet(d1);     

       d2.Operation();

      

       d2.setComponet(base);

       d1.setComponet(d2);

       d1.Operation();

      

      

    }

优点:可以随意更换装饰,扩展性很强。

缺点:必须对外暴露装饰者实现类;装饰职责链过长。

      装饰模式用于对于已有功能的扩展比较适合。装饰模式和适配器模式一样,都用于java.io包。如果没有用到装饰模式就不要编写多余的代码,因为装饰模式可以再有需要的时候再添加上去。

 

装饰

适配器

适用背景

在已有功能的基础上扩展功能

在已有功能的基础上统一接口

使用的接口

使用原来接口

使用新的接口

增加功能

增加功能

可以修改功能

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值