重构if...else...或者switch程序块 为 中介者(Mediator)模式.的思考

http://www.cnblogs.com/insus/p/4142264.html

首先普世的编程架构好坏评判是SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)

具体来说,就是当有需求的curd时候,代码应该
1)涉及的文件尽可能的少
2)修改的文件行数尽可能的少
3)修改的文件行块间距不应该太长,避免程序员在一个文件中来回移动.鼠标点击数尽可能少.避免影响思路.
4)不应该影响其他模块的.这样就不必全面回归测试.
5)鲁棒性:即使输入错误,也不应该系统崩溃.

那么,我们来看看这篇洋洋得意的重构的结果吧.

原来的代码

logic ( string arg)

{
switch (arg)
{
case "A" :
Do_A();
break;
case "B" :
Do_B();
break;
}

}

// support function group
void DO_A()
{
}

void DO_B()
{
}

他的代码...

开始评测
***增加
客户要求增加功能C
原来的方法
到 logic中间,switch模块尾巴加上 case "C"... 三行
在同一个文件或者其他文件中,增加一个DO_C()方法.
***查询
发现一个logic bug.
设断点在switch...等地方,然后f11进去就可以知道了.
发现是do_a有问题,那么就只需要修改do_a()
***删除
"B"模块不需要了.
到switch哪里,直接删除"B"模块...
*不小心多删了case"C" -- 编译报错,第一时间就修改回来.

***修改
客户要求修改功能B
直接到DO_B()哪里...在ide中,只需要ctrl click就可以直接定位到具体的模块...

对比一下.如果用设计模式,会是什么样的后果.

如果这个方法里面需要2个switch呢.一个是 switch on string 另外一个 switch on int ,那么如果不用泛型.这代码就成线性增加了.

时间: 2024-10-04 20:05:02

重构if...else...或者switch程序块 为 中介者(Mediator)模式.的思考的相关文章

重构if...else...或者switch程序块

我们在开发asp.net时,经常有使用if...else...或者是使用switch来进行多个条件判断.如下面这篇<用户控件(UserControl) 使用事件 Ver2>http://www.cnblogs.com/insus/archive/2011/11/18/2253605.html,就是一段代码: 其实按上面的写法一点问题都没有,但是我们在审检代码看到这段代码时似乎要花点时间阅读,用意也不够明朗,藕合性也高. 建议把每个case块写成一个独立的方法.然后再调用它,目的是为最小化方法.

Java 实现中介者(Mediator)模式

类图 public interface IMediator { public void createMediator(); public void work(); } /** * 中介.调节实际上需要交互的两个元素,让其松耦合 * @author stone * */ public class Mediator implements IMediator { private XmlCode xmlCode; private XmlPreview xmlPreview; @Override publ

Java中介模式(Mediator模式)

Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉及到修改很多其他对象的行为,如果使用Mediator模式,可以使各个对象间的耦合松散,只需关心和 Mediator的关系,使多对多的关系变成了一对多的关系,可以降低系统的复杂性,提高可修改扩展性. 如何使用中介模式 首先 有一个接口,用来定义成员对象之间的交互联系方式:    public inte

Objective-C设计模式——中介者Mediator(对象去耦)

中介者模式 中介者模式很好的诠释了迪米特法则,任意两个不相关的对象之间如果需要关联,那么需要通过第三个类来进行.中介者就是把一组对象进行封装,屏蔽了类之间的交互细节,使不同的类直接不需要持有对方引用也可以进行访问. 中介者Mediator会持有同事类(就是需要处理交互逻辑的对象)Colleague的引用,同时每个colleague也会持有Mediator一份引用.这样colleague如果有任何和别的类交互的请求就会发给Mediator,对改组对象进行了解耦合.其实我们平时经常写的视图控制器本身

c++ 行为型模式-中介者(Mediator)

1) 意图 用一个中介对象来封装一系列的对象交互,中介者使各个对象不需要显示地相互应用,从而使其耦合松散,并且可以独立地改变它们之间的交互 2) 结构 其中: Mediator定义一个接口用于各同事对象的通信 ConcreteMediator 通过协调各个Colleague 类对象实现协助行为 Colleague 知道它的中介者对象,每个Colleague 类对象在需要与其他Colleague 通信的时候与它的中介者通信 3) 适用性 一组对象通信方式复杂,产生的相互依赖关系结构混乱且难以理解

设计模式-可复用面向对象软件的基础 [读书笔记]

由于如下笔记中有直接描述是该书的第几节,因此将该书的封面贴下: 1.将软件与设计模式比拟为城市与建筑模式,那么在面向对象的解决方案里,我们将对象和接口看成墙壁和门窗,模式的核心在于提供了相关问题的解决方案. 在软件设计中可能会遇到很多类似的问题,在每次遇到类似问题时我们不必全都新想办法来解决,而可以复用之前解决类似问题的方案,解决问题多之后就 会有针对特定问题有特定(相对固定)的方式方法来解决,这相对固定的方式方法就是设计模式,其也算是经验总结. 开篇有两种在设计模式书籍里面很重要的表格和关系图

软考笔记第十一天值面向对象技术

相关概念: 对象,类(实体类.边界类.控制类),抽象,封装,继承和泛化,多态,接口,消息,组件,模式和复用 设计原则: 单一职责原则(降低耦合):设计目的单一的类 开放-封闭原则:对扩展开放,对修改封闭 李氏(Liskov)替换原则:子类可以替换父类[子类可以赋值给父类:如果父类中装的是子类对象,那么可以将这个父类强转成子类对象] 依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程 接口隔离原则:使用多个专门的接口比使用单一的总接口要好 组合重用原则:要尽量使用组合,而不

小酌重构系列[14]——使用多态代替条件判断

概述 有时候你可能会在条件判断中,根据不同的对象类型(通常是基类的一系列子类,或接口的一系列实现),提供相应的逻辑和算法.当出现大量类型检查和判断时,if else(或switch)语句的体积会比较臃肿,这无疑降低了代码的可读性.另外,if else(或switch)本身就是一个“变化点”,当需要扩展新的对象类型时,我们不得不追加if else(或switch)语句块,以及相应的逻辑,这无疑降低了程序的可扩展性,也违反了面向对象的OCP原则. 基于这种场景,我们可以考虑使用“多态”来代替冗长的条

java中switch case和break使用

switch只能比较数值或字符或者类对象 首先看看switch的括号,当中放置您要取出数值的变量.取出数值之后,程序会开始与case中所设定的数字或字符做比较, 如果符合就执行其中的语句,直到遇到break后离开switch程序块:如果没有符合的数值或字符,则会执行default后的语句, default不一定需要:如果没有默认要处理的动作,可以省去这个部分 实例如下: @Test public void switchCase(){ this.net(2); } private void net