Observer, State and Strategy, Template Method, Visitor

Sun, Apr 10, 2022 One-minute read

1. Observer

当一个对象状态的改变需要改变其他对象, 或实际对象是事先未知的或动态变化的时, 可使用观察者模式。

抽签系统,摇号,发短信,发MQ消息,后面两个会随着业务调整而调整,不利于维护

  • interface EventListener

  • MessageEventListener implements EventListener

  • MQEventListener implements EventListener

  • EventManager
    • enum EventType (MQ, Message)
    • 订阅subscribe
    • 订阅unsubscribe
    • notify 通知
  • abstract class LotteryService 在抽象类中写好⼀个基本的⽅法,在⽅法中完成新增逻辑的同时,再增加抽象 类的使⽤。⽽这个抽象类的定义会有继承者实现

业务结构就只需要uid和日期

2. State

策略模式相似, 但有一个关键性的不同——在状态模式中, 特定状态知道其他所有状态的存在, 且能触发从一个状态到另一个状态的转换; 策略则几乎完全不知道其他策略的存在。

如果对象需要根据自身当前状态进行不同行为, 同时状态的数量非常多且与状态相关的代码会频繁变更的话, 可使用状态模式。

如果某个类需要根据成员变量的当前值改变自身行为, 从而需要使用大量的条件语句时, 可使用该模式。

模拟一个事件的状态

  • ActivityInfo
  • Status
  • ActivityService

所以逻辑就是如果状态是a,那状态b,c发生,如果是D,那be发生之类的

非常崩溃

  • event
    • AState extends State
    • Result
    • StateHandler

    3. Strategy

    装饰模式可让你更改对象的外表, 策略则让你能够改变其本质, 这个模式理解起来不同打折卷

    跟工厂模式区分?

    兩者的差別在於工廠模式中的工廠類別並不會去使用產品,因為工廠模式只關注在如何產生建立物件;在策略模式中的環境類別則是使用外部傳入的策略類別,因此我們必須知道傳入策略的實際內容才行。

    4. Template Method

    工厂方法模式是模板方法模式的一种特殊形式。 同时, 工厂方法可以作为一个大型模板方法中的一个步骤。

    模板方法基于继承机制: 它允许你通过扩展子类中的部分内容来改变部分算法。 策略模式基于组合机制: 你可以通过对相应行为提供不同的策略来改变对象的部分行为。 模板方法在类层次上运作, 因此它是静态的。 策略在对象层次上运作, 因此允许在运行时切换行为

    5. Visitor

    如果你需要对一个复杂对象结构 (例如对象树) 中的所有元素执行某些操作, 可使用访问者模式。

    访问者模式通过在访问者对象中为多个目标类提供相同操作的变体, 让你能在属于不同类的一组对象上执行同一操作。

    可使用访问者模式来清理辅助行为的业务逻辑。

    该模式会将所有非主要的行为抽取到一组访问者类中, 使得程序的主要类能更专注于主要的工作。

    当某个行为仅在类层次结构中的一些类中有意义, 而在其他类中没有意义时, 可使用该模式。

    你可将该行为抽取到单独的访问者类中, 只需实现接收相关类的对象作为参数的访问者方法并将其他方法留空即可。

    了访问者模式的核⼼在于同⼀个事物不同视⻆下的访问信息不同,⽐如⼀个 美⼥ ⼿⾥拿个 冰激 凌 。⼩朋友会注意冰激凌,⼤朋友会找⾃⼰喜欢的地⽅观测敌情。

    这个模式通常用于游客访问等,或者不同职别管理层看到的,反正增加类别是有用,但是visitor用了底层员工信息和方法,我看不出它哪里优秀,可能太复杂了,我没理解