首页 > 其他分享 >【设计模式】行为型

【设计模式】行为型

时间:2023-01-29 14:36:11浏览次数:40  
标签:对象 子类 接口 Shape 模式 设计模式 行为 访问者

职责链模式

Client->A->B->C,避免请求发送者与接收者耦合,将接收者对象连接成一条链,直到有对象处理

命令模式

 将请求转换为一个包含与请求相关的所有信息的独立对象。 可根据不同的请求将方法参数化或加入队列等待处理

解释器模式

 实现一个表达式接口,用于解释一个特定的上下文。例如:Java代码编译,Sql解析

迭代器模式

 遍历集合中元素且无需暴露集合底层表现(例如列表)形式 ,例如Java中的Iterator

中介者模式

 对象直接不直接交互,而是引入一个中间者进行简介交互,降低对象之间的耦合,同时简化对象间复杂的依赖关系

备忘录模式

在不破坏对象封装的前提下,保存对象之前的状态用于恢复,为了不破坏封装,创建快照操作由原始类自行完成。通常生成的快照(备忘录接口的实现)不可修改,只提供构造方法赋值

观察者模式

 订阅-发布结构,当消息发布时,消息推送者会遍历订阅者列表,并调用订阅者接口,将消息推送给订阅者

状态模式

 有限状态机,上下文的状态单独封装并抽象为一个接口,针对不同的状态有不同方法实现。例如:卧室的多色灯,如果当前为白色,重新打开,灯色变为黄色,继续重新打开,灯色为黄白色

策略模式

 定义一系列算法,将每一个算法封装成一个类,并让它们可以相互替换。例如:地图导航根据用户的选择产生导航策略,比如步行导航,驾车或打车等。以上的各种导航都是对导航接口的封装,针对用户的选择提供不同的导航类。

模板方法模式

 定义一个算法框架,将一些方法实现延迟到子类。例如:开车:(1)挂挡 (2)起步 (3)行驶,开手动挡车:(1)踩离合挂挡 (2)松离合踩油门起步 (3)行驶,开自动挡车:巴拉巴拉。。。

访问者模式

将数据结构与数据操作分离,多用于解决稳定的数据结构和易变的数据操作耦合问题。例如:Shape类,有子类Circle,Square,Triangle,现在需要为Shape添加一个calculatePerimeter方法,思路很简单吧,只需要给Shape加一个calculatePerimeter声明,然后在子类中实现就可以了,那如果再加上计算面积呢?如果计算其他乱七八糟的指标呢?每次都需要修改接口和实现,显然不符合开闭原则。

这个时候就会用到访问者模式了,可以定义一个访问者Visitor,声明visiteCircle(),visiteSquare(),visiteSquare()方法,然后由PerimeterVisitor实现具体的访问方法,避免对原代码的修改。那如何调用这些方法呢?访问者访问的时候并不知道传入的是哪个子类对象,总不能写一大堆instanceOf来判断子类对象吧。

访问者确实不知道具体子类,不过子类自己知道啊,如果把方法调用放到每个子类里,问题是不是就解决了?

比如,Shape类添加accept(Visitor visitor)接口,Circle中实现

double accept(Visitor visitor) {
    visitor.visiteCircle();
}

好了,现在问题解决了,当需要计算周长时,可以用PerimeterVisitor实现访问各个Shape的方法,调用时,通过shape.accept(perimeterVisitor)就可以了,每个Shape子类都有自己的访问实现。如果要添加面积计算之类的,再写一个AreaVisitor之类的就好了。

标签:对象,子类,接口,Shape,模式,设计模式,行为,访问者
From: https://www.cnblogs.com/maerpao/p/17070872.html

相关文章

  • 24种设计模式之单例模式(singleton)
    24种设计模式之单例模式(singleton)目录24种设计模式之单例模式(singleton)饿汉模式:推荐使用懒汉模式:不推荐静态内部类模式:推荐最完美的方式java之父推荐:解决线程同步、反序......
  • 跟我学Java设计模式第7天:行为型设计模式
    Java设计模式文章目录​​跟我学Java设计模式第一天:设计模式概述和软件设计原则​​​​跟我学Java设计模式第二天:简单工厂模式、工厂方法模式、抽象工厂模式​​​​跟我学......
  • 【设计模式】结构型
    装饰者模式组合的方式扩展类。符合开闭原则外观模式隐藏子系统接口,提供统一对外服务接口。符合迪米特法制(最少知道原则)代理模式使用代理对象控制对原对象的访问,降低系......
  • 设计模式
    设计模式的六大原则1、开闭原则(OpenClosePrinciple)开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言......
  • 浅谈PHP设计模式的访问者模式
    简介:访问者模式,属于行为型的设计模式。表示一个作用于某对象结构中的各元素的操作。它是你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。适用场景:类中......
  • WPF鼠标、键盘、拖拽事件、用行为封装事件
    WPF鼠标、键盘、拖拽事件、用行为封装事件本文主要介绍了WPF中常用的鼠标事件、键盘事件以及注意事项,同时使用一个案例讲解了拓展事件。除此之外,本文还讲述如何用行为(Behav......
  • WPF鼠标、键盘、拖拽事件、用行为封装事件
    WPF鼠标、键盘、拖拽事件、用行为封装事件本文主要介绍了WPF中常用的鼠标事件、键盘事件以及注意事项,同时使用一个案例讲解了拓展事件。除此之外,本文还讲述如何用行为(Beha......
  • java23种设计模式
    Java设计模式学习创建型模式简单工厂模式简单工厂模式严格意义上来说,并不属于设计模式中的一种,不过这里还是简单记录下。定义:由一个工厂对象决定创建出哪一种类型实例......
  • 模板方法设计模式
    模板方法设计模式1.说明核心是:定义一个模板类,在模板类中规定其整体的骨架并确定哪些方法是允许子类可以去重写的,哪些是不允许子类去重写的.用来保证核心算法不被破坏.......
  • 浅谈PHP设计模式的享元模式
    简介:享元模式,属于结构型的设计模式。运用共享技术有效地支持大量细粒度的对象。适用场景:具有相同抽象但是细节不同的场景中。优点:把公共的部分分离为抽象,细节依赖于抽......