设计模式

[TOC]

为了更好地记忆,记下 UML 图

工厂模式

简单工厂模式

image-20211011230015826

工厂方法模式

举例:

image-20211011230332744

抽象工厂模式

image-20211011230633732

单例模式

image-20211011230855446

image-20211011231004972

适配器模式与外观模式

image-20211011231858289

image-20211011231603917

image-20211011234206255

组合模式

image-20211011235026845

装饰模式

image-20211012001732967

代理模式

image-20211012002101259

装饰模式和代理模式的区别

Java中“装饰模式”和“代理模式”有啥区别? - 海岸红杉的回答 - 知乎 https://www.zhihu.com/question/41988550/answer/567925484

第一段说的是代理模式,侧重于不能直接访问一个对象,只能通过代理来间接访问,比如对象在另外一台机器上,或者对象被持久化了,对象是受保护的。对象在另外一台机器上,其实就是rpc,感兴趣的可以看看dubbo的源码本地反问的其实就是远程对象的代理,只不过代理帮你做了访问这个对象之前和之后的很多事情,但是对使用者是透明的了。对象被持久化了,比如mybatis的mapperProxy。通过mapper文件自动生成代理类。第三种,对内核对象的访问。

第二段说的是装饰器模式是因为没法在编译器就确定一个对象的功能,需要运行时动态的给对象添加职责,所以只能把对象的功能拆成一一个个的小部分,动态组装,感兴趣的可以看看dubbo的源码,里面的mock,cluster,failover都是通过装饰器来实现的。因为这些功能是由使用者动态配置的。但是代理模式在编译器其实就已经确定了和代理对象的关系。

第三段说的是,这个两个设计模式是为了解决不同的问题而抽象总结出来的。是可以混用的。可以在代理的基础上在加一个装饰,也可以在装饰器的基础上在加一个代理。感兴趣的去看看dubbo源码,里面就是这么实现的。

命令模式

image-20211012105907795

观察者模式

image-20211012110210491

策略模式

image-20211012110522665

模板方法模式

image-20211012112644053

状态模式

image-20211012110810797

# 推荐文章
  1.MYSQL45讲-笔记
  2.《Java业务开发常见错误100例》笔记
  3.django
  4.flutter
  5.elastic search

评论


:D 一言句子获取中...