死磕-设计模式(四)

简介: 死磕-设计模式(四)

人若无名,练剑十年~~

一、策略模式与简单工厂模式的结合

接着上篇继续去写:改造后的CashContext的代码如下:

客户端的代码如下:

二、总结这样做法的优点:

1、这样做比上一篇的策略模式中的客户端的代码更清晰多了。

2、而在简单工厂模式中需要让客户端记住两个类:CashSuper和CashFactory。而策略模式和简单工厂结合的用法,客户端只需要认识一个类CashContext类就可以了。耦合度降低了,具体的收费算法与客户端分离,连算法的父类的CashSuper都不让客户端认识了。

三、策略模式解析:

1、策略模式是一种定义一系列算法的行为,从概念上来看,所有这些算法完成的都是相同的工作,只是实现方式不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。

2、策略模式的Strategy类层为Context定义了一系列的可供重用的算法或者行为,继承有助于析取出这些算法中的公共功能,在上面的例子中,公共的功能就是指计算费用的结果。

3、策略模式的优点简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。

4、策略模式就是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。

5、但是在基本的策略模式中,选择所用具体实现的职责由客户端对象来承担,并转交给策略模式的Context对象,这样并没有解除客户端需要选择判断的压力。但是策略模式和简单工厂模式的结合后,选择具体实现的职责可以由Context来承担,这就是最大化地减轻了客户端的压力。

四、简单工厂+策略模式的缺点:

1、在CashContext中用到了switch,如果新增一个算法的话,这里必须修改switch的代码。也是很不爽的,因为任何需求的变更都是需要成本的,高手和菜鸟的区别就是需求变更时改动小。

五、解决上面的问题:

可以用反射的思想,后面继续写它,完善它。

今天先到这了,明天见~~

相关文章
|
3月前
|
设计模式 算法
死磕-设计模式(三)
死磕-设计模式(三)
|
3月前
|
设计模式 算法
死磕-设计模式(二)
死磕-设计模式(二)
|
3月前
|
设计模式 算法 程序员
死磕-设计模式(一)
死磕-设计模式(一)
|
7月前
|
设计模式 Java 开发者
一目了然!谁能想到Java多线程设计模式竟然被图解,看完不服不行
多线程设计模式在Java编程中起着至关重要的作用,它能够有效提高程序的执行效率,使得程序在处理大量数据和复杂任务时更加高效。然而,对于初学者来说,理解和应用多线程设计模式可能是一项相当具有挑战性的任务。为了让读者更加轻松地掌握这一复杂主题,我们带着一种全新的图解方式,深入剖析Java多线程设计模式的精髓。
|
设计模式 消息中间件 算法
面试题(二十五)设计模式
1. 设计模式 1.1 说一说设计模式的六大原则 参考答案 单一职责原则 一个类,应当只有一个引起它变化的原因;即一个类应该只有一个职责。 就一个类而言,应该只专注于做一件事和仅有一个引起变化的原因,这就是所谓的单一职责原则。该原则提出了对对象职责的一种理想期望,对象不应该承担太多职责,正如人不应该一心分为二用。唯有专注,才能保证对象的高内聚;唯有单一,才能保证对象的细粒度。对象的高内聚与细粒度有利于对象的重用。一个庞大的对象承担了太多的职责,当客户端需要该对象的某一个职责时,就不得不将所有的职责都包含进来,从而造成冗余代码。 里氏替换原则 在面向对象的语言中,继承是必不可少的、优秀的语言机制
104 0
阿里面试官:使用策略模式+工厂模式干掉代码中过多的if-else
过多if-else项目背景 如果一开始就知道现在的业务需要,大部分人都不会在代码里添加过多的if-else判断的,烂代码基本都是刚开始写代码时并没有太多的需求,随着期需求不断的修改增加,开发时间也较的紧张,代码往往都是怎么快速怎么写。当然多写一个if-else比使用各种设计模式肯定来的更快速了,这也就导致项目代码慢慢变得臃肿,难以维护的主要原因。在有空闲时间的情况下就可以给以前的代码做一次手术了。先看本次未优化前的代码:
|
设计模式 算法 前端开发
好记性不如烂笔头——设计模式
好记性不如烂笔头——设计模式
好记性不如烂笔头——设计模式
|
设计模式 关系型数据库 MySQL
平时代码中用不到设计模式?Are you kidding me?
引子 平时我是个反应非常慢的人。有多慢呢?大概是两年前有次团队内部开会时,我听到同学说平时代码中用不到设计模式,我当时没有回答。两年后我终于反应过来了:“Are you kidding me?我每天都在用!”
平时代码中用不到设计模式?Are you kidding me?
|
设计模式 前端开发
前端仔学学设计模式--单例模式
设计模式知识提取将分为N篇文章,本篇文章是个开篇文,后期会进行其他相关的同步(会就分享,不会就折腾),旨在提升技能,更好地享受敲键盘的快感~
前端仔学学设计模式--单例模式
|
设计模式 SQL 前端开发
面试官问,你在开发中有用过什么设计模式吗?我懵了
面试官问,你在开发中有用过什么设计模式吗?我懵了
304 0
面试官问,你在开发中有用过什么设计模式吗?我懵了