Java # Design Patrern 设计模式

Observer Pattern

观察者模式

简单点理解就是为了更新内容,,定义了对象之间的一对多依赖,多个对象同时监听一个对象,当被监听对象的状态发生改变时,它的所有依赖者都会收到通知并自动更新,被监听对象称为主题suject,监听对象称为观察者observer。

  • 父类为抽象类,父类中的update()方法为抽象方法。
  • observer必须实现update方法,来接收suject状态变化时的通知及更新。suject维护一个observer列表,在状态变化时会逐个的调用observer的update方法来通知、更新observer,为此,suject须提供注册(添加observer到列表)、删除、通知更新三个方法。
    在这里插入图片描述

Pull Observer
在这里插入图片描述
再举一个例子:
在这里插入图片描述
push Observer
在这里插入图片描述
Pull Observer/ Push Observer 的区别

  • push是指suject在状态变化时将所有的状态信息都发给observer,pull则是suject通知observer更新时,observer获取自己感兴趣的状态
  • Pull需要Observer自己去取数据,所以Subject要提供相应的get方法
  • push模式要求suject必须了解observer需要的状态,pull则是observer按需获取;push模式下observer的update方法的参数是具体的状态信息,发生变化时必须要重写update方法,pull模式则是将suject对象本身传给update,是最大的参数集合

Composite Pattern

组合模式

需要注意的是该模式下:

  • 父类必须是一个抽象类且包含一个抽象类(可以注意到下图中的父类和父类中的抽象方法是斜体,斜体代表抽象)
  • 有两个子类去继承父类,且实现父类中的抽象方法
  • 有一个Aggregation(聚合)

在这里插入图片描述
有两种设计变体用于定义和实现子相关操作,例如向容器添加子组件或从容器中删除子组件(add(child)/remove(child)) 以及访问子组件 ( getChild()):

  • 设计的一致性:与子项相关的操作在接口中定义Component。这使得客户能够统一对待Leaf和Composite对象。但是类型安全性会丢失,因为客户端可以对对象执行与子级相关的操作Leaf。
  • 类型安全设计:与子级相关的操作仅在类中定义Composite。客户必须以不同的方式对待Leaf和Composite反对。但由于客户端无法Leaf对对象执行与子级相关的操作,因此获得了类型安全。
    组合设计模式强调一致性而非类型安全。

以下是一个例子:
在这里插入图片描述

TemplateMethod Pattern

注意抽象类和抽象方法
TemplateMethod()是具体的算法骨架
在这里插入图片描述

Strategy Pattern(Template Class)

策略模式

注意区分和前面的TemplateMethod Pattern

策略模式(也称为策略模式)是一种行为 软件设计模式,允许在运行时选择算法。代码不是直接实现单个算法,而是接收运行时指令,决定使用哪一组算法。Strategy 模式是具有相同结构但更具体意图的模板类模式。
在这里插入图片描述
和TemplateMethod 类似,但是Hook对象和它们的hook方法可以在运行时改变

在这里插入图片描述
TemplateMixin 中是组合关系,比聚合关系更强,实心菱形头。
在这里插入图片描述

Iterator Pattern(Input Stream)

迭代器模式(输入流)

迭代器模式是一种设计模式,其中迭代器用于遍历容器并访问容器的元素。迭代器模式将算法与容器分离;在某些情况下,算法必然是特定于容器的,因此无法分离。

在这里插入图片描述

Sink Pattern(Output Stream)

在这里插入图片描述

Factory Class Pattern

工厂模式

可以通过Dependency(依赖)关系和Association(关联)关系来判断各个部分;注意抽象类和抽象方法
在这里插入图片描述

Decorator Pattern

装潢模式

它能解决什么问题?

  • 在运行时动态地向对象添加(或从对象中删除)
  • 提供一种灵活的子类化替代方案来扩展功能

需要注意:

  • 注意子类聚合关系数量仅仅为1且只有一个composite;
  • 将继承与聚合相结合;
    在这里插入图片描述
    在这里插入图片描述

Singleton Pattern

单例模式
在这里插入图片描述

Adapter Pattern

适配器模式

该模式用于将一个界面转换为另一种界面。这使得具有相互不兼容接口的类能够进行通信。

下图为对象适配器
在这里插入图片描述

下图也叫类适配器,类适配器的优点是它完全适应目标类,因此只能覆盖目标类的行为;缺点是类适配器不能用于自动适配子类
在这里插入图片描述

State Pattern

状态模式

允许对象在其内部状态发生变化时改变其行为,状态模式可以解释为策略模式,它能够通过调用模式接口中定义的方法来切换策略
在这里插入图片描述
状态模式主要解决两个问题:

  • 当对象的内部状态改变时,它的行为应该改变。
  • 特定于状态的行为应该单独定义。也就是说,添加新状态不应该影响现有状态的行为。

欢迎阅读,以及欢迎指出不足之处,如果点赞就更好了;
祝您学习愉快~😊😊😊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值