【设计模式】行为型

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。【设计模式】行为型,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

职责链模式

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(),visiteTriangle()方法,然后由PerimeterVisitor实现具体的访问方法,避免对原代码的修改。那如何调用这些方法呢?访问者访问的时候并不知道传入的是哪个子类对象,总不能写一大堆instanceOf来判断子类对象吧。

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/206161.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!