您的位置:首页 > 其它

学习23种设计模式之简单工厂模式

2013-03-07 10:36 183 查看
准备知识
在OO设计领域,我们知道前人总结了不少的经验,许多的经验在现代软件工程过程中已经被认为是原则来遵守。下面笔者摘抄几项下文涉及到的OO原则的定义。

OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。我的理解是,对于一个已有的软件,如果需要扩展,应当在不需修改已有代码的基础上进。

DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程。我的理解是,对于不同层次的编程,高层次暴露给低层次的应当只是接口,而不是它的具体类。

LoD(迪米特法则,Law of Demeter):只与你直接的朋友通信,而避免和陌生人通信。众所周知类(或模块)之间的通信越少,耦合度就越低,从而更有利于我们对软件的宏观管理。老子论“圣人之治”有相同的思想,《老子》云:“是以圣人之治,虚其心,实其腹,弱其志,常使民无知无欲。”,又云:“小国寡民,邻国相望,鸡犬之声相闻,民至老死,不相往来。”。佩服我们的老祖宗,N千年前就想到了西方N千年后才想到的东西,同时也佩服《java与模式》的作者阎宏,可以用中国传统哲学思想这么生动的说明这一软件设计原则。

以一个计算器功能的程序为例

Operation类,这个类为计算器所有操作的父类。

public abstract class Operation {

private double numberA;
private double numberB;

//抽象具体实现方法,让子类实现
public abstract double getResult();

public double getNumberA() {
return numberA;
}
public void setNumberA(double numberA) {
this.numberA = numberA;
}
public double getNumberB() {
return numberB;
}
public void setNumberB(double numberB) {
this.numberB = numberB;
}
}


OperationAdd类,继承Operation类,实现加法操作

public class OperationAdd extends Operation{

/**
* 加法操作
*/
@Override
public double getResult() {
return super.getNumberA() + super.getNumberB();
}

}


OperationSub类,继承Operation类,实现减法操作

public class OperationAdd extends Operation{

/**
* 加法操作
*/
@Override
public double getResult() {
return super.getNumberA() + super.getNumberB();
}

}


OperationFactory类,这个类生产需要的Operation子类。

public class OperationFactory {

public static Operation createOperation(char operation){
Operation oper = null;

switch(operation){
case '+':
oper = new OperationAdd();
break;
case '-':
oper = new OperationSub();
break;
case '*':
oper = new OperationMul();
break;
case '/':
oper = new OperationDiv();
break;
}

return oper;
}
}


一个简单的计算器小程序,运用到了面向对象的继承、封装、多态。这个简单工厂模式大大增加了程序的灵活性和扩展性,如果我还要添加开根操作,只需要继承Operation类实现开根操作,再在OperationFactory类中

加一个开根的判断就行了,无需修改原来的代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: