为了账号安全,请及时绑定邮箱和手机立即绑定

【学习打卡】第2天 Java设计模式精讲-Debug方式+内存分析 第十一讲

【学习打卡】第2天 Java设计模式精讲-Debug方式+内存分析 第十一讲

课程名称:Java设计模式精讲-Debug方式+内存分析,真正学懂设计模式

课程章节: 装饰者模式讲解+Coding+源码解析

主讲老师:Geely

课程内容:

今天学习的内容包括:

什么是装饰者模式  装饰者模式 优点 缺点  Coding  源码解析 以及在业务上的应用

课程收获:

装饰者设计模式

1.定义

  在不改变原有对象的基础之上,将功能附加到对象上

1.1 特点

     提供了比继承更有弹性的替代方案(扩展原有对象功能)

1.2 类型  : 结构型

2.适用场景

   1、扩展一个类的功能或给一个类添加附加职责

   2、动态的给一个对象添加功能,这些功能可以再动态的撤销

3.缺点

  1.会出现更多的代码,更多的类,增加程序复杂性

  2.动态装饰时 多层装饰时会更复杂

4.优点

      1.继承的有力补充,比继承灵活,不改变原有对象的情况下给一个对象扩展功能

      2.通过使用不同装饰类以及这些装饰类的排列组合,可以实现不同效果

      3.符合开闭原则

5.装饰者-相关的设计模式

装饰者模式和代理模式

装饰者模式和适配器模式

外观模式和抽象工厂模式

编写代码

  1. 简单代码 

package com.zw.design.pattern.creational.structural.decorator.v2;
public abstract class ABattercake {
    protected String getDesc(){
        return null;
    }
    protected int cost(){
        return 0;
    }
}
package com.zw.design.pattern.creational.structural.decorator.v2;

public class Battercake extends ABattercake {
    protected String getDesc(){
        return "武大郎煎饼";
    }
    protected int cost(){
        return 9;
    }
}

2.编写装饰者聚合类

package com.zw.design.pattern.creational.structural.decorator.v2;

/****
 * 装饰者聚合类
 * 是否是抽象类 需要看具体业务
 */
public abstract class AbstractDecorator extends ABattercake {

    private ABattercake aBattercake;

    public AbstractDecorator(ABattercake aBattercake){
        this.aBattercake=aBattercake;
    }
    //如果是抽象方法 子类必须去重写改方法
    public abstract  void doSingle();


    @Override
    protected String getDesc() {
        return this.aBattercake.getDesc();
    }

    @Override
    protected int cost() {
        return this.aBattercake.cost();
    }
}

3.具体实现类

package com.zw.design.pattern.creational.structural.decorator.v2;

public class EggDecorator  extends AbstractDecorator{

    public EggDecorator(ABattercake aBattercake) {
        super(aBattercake);
    }

    @Override
    public void doSingle() {

    }

    @Override
    protected String getDesc() {
        return super.getDesc()+"加一个煎蛋";
    }

    @Override
    protected int cost() {
        return super.cost()+1;
    }
}
//第二个类
package com.zw.design.pattern.creational.structural.decorator.v2;

public class SausageDecorator extends AbstractDecorator{
    public SausageDecorator(ABattercake aBattercake) {
        super(aBattercake);
    }

    @Override
    public void doSingle() {

    }

    @Override
    protected String getDesc() {
        return super.getDesc()+" 加入一根火腿";
    }

    @Override
    protected int cost() {
        return super.cost()+3;
    }
}

4.测试

package com.zw.design.pattern.creational.structural.decorator.v2;

public class TestMain {
    public static void main(String[] args) {
      ABattercake aBattercake;
      aBattercake=new Battercake();
      //加鸡蛋
      aBattercake=new EggDecorator(aBattercake);
      //加火腿
      aBattercake=new SausageDecorator(aBattercake);
      aBattercake=new EggDecorator(aBattercake);

        System.out.println("aBattercake = " + aBattercake.getDesc()+" 价格 "+aBattercake.cost());

    }
}

ulm 设计图

https://img1.sycdn.imooc.com//62ebb8f60001f94016241174.jpg

测试结果

image-20220726223502852https://img1.sycdn.imooc.com//62ebb90800017d3713480130.jpg

框架源码解析

在spring框架当中TransactionAwareCacheDecorator  该类主要目的是提高缓存和事务之间的同步级别

https://img1.sycdn.imooc.com//62ebb9500001aca917061062.jpg

在mybatis 当中使用装饰者模式应用为FifoCache

https://img1.sycdn.imooc.com//62ebb965000140a117240990.jpg

今天学习课程共用了50分钟,重新学习一下设计模式 更加清楚知道装饰者模式的应用以及如何在自己项目当中去使用它  大家一起加油 💪🏻


点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消