0 0

关于一个方法三个功能用的问题0

       各位大神,最近看到很多纠结的代码,如下:

       如果有一个方法M,M很庞大,功能很复杂,开始只有一个模块A在用,过一段时间又做一个模块B也要用M这个方法,过一时间又做C也用M方法。但是A、B、C三个功能,不能直接用M方法,都需要进行一些个性化的定制开发。这样三个功能 完以后,M变得方法很难看明白(很恶心)。

        我想不明白,针对以上的情况正确做法是什么?

        1、针对A、B、C分别写三个M1、M2、M3?这样的优点:(1)可读性好 (2)如果功能变了只修改对应的方法就可以了。缺点:如果三方法共用的代码变了,会改三个方法。如果有漏改的对应的功能就不对。

        2、三个功能用一个M方法。优点:如果修改了共用的代码,只改一处就可以了。缺点:(1)可读性不好 (2)但是如果修改错了,三个功能都不能用。

 

        怎么办?????各位大神有什么好的建议。

 

2014年11月05日 17:56

3个答案 按时间排序 按投票排序

0 0

我怎么看到了简单工厂,工厂方法,以及未出现的抽象工厂模式

2014年11月18日 10:05
0 0

包装模式也可用在此场景,楼上说的策略模式有异曲同工之妙

public class M {

public void m() {

System.out.println("I am mmmmmmmmmmmmmm");
};

interface P {
public void pm();
}

static class Ad implements P {

private M m;

public Ad(M m) {
this.m = m;
}

@Override
public void pm() {

System.out.println("PPPPPPPpp");

m.m();
}
}

static class Ad1 implements P {

private M m;

public Ad1(M m) {
this.m = m;
}

@Override
public void pm() {

System.out.println("PPPPPPPpp1111111111111111");

m.m();
}
}

public static void main(String[] args) {

M m = new M();

Ad ad = new Ad(m);

ad.pm();


Ad1 ad1 = new Ad1(m);

ad1.pm();
}
}

2014年11月06日 11:23
0 0

这是策略模式的典型应用场景啊。

前提:
1,M方法的主要计算逻辑,ABC都是相同的
2,M方法细节的计算逻辑,ABC有个性化需求

那么M方法主要计算逻辑写出来,调用细节计算逻辑的部分封装成算法类。
这些算法类继承同一个算法接口。
M方法所在的类提供设置算法类的接口。

那么ABC分别调用M方法之前,把需要的算法类的实例设置到M方法所在的类里面。
就能达到动态切换个性化算法的目的。

比如说,M方法提供这样的接口(伪代码)

class MClass{
setCalc1 (CalcClass c1)

setCalc2 (CalcClass c2)

void M()
{
   this.c1.run();
   this.c2.run();
}
}

c1,c2都是同一个接口CalcClass的子类。

A方法调用的时候

MClass mc = new MClass()
mc.setCalc1(new Calc1())
mc.setCalc2(new Calc2())

mc.M()
}

2014年11月06日 10:24

相关推荐

Global site tag (gtag.js) - Google Analytics