实际应用中会用到很多的设计模式,设计模式不属于技术实现,但是它会帮助你把代码实现得更优美,使用设计模式的目的就是要使你的代码便于维护、便于扩展、便于复用同时灵活性又好,下面对这几个词语解释解释:
便于维护:此谓可维护,就是你的代码可修改,什么叫可以修改呢?就是要修改的时候只需要修改要改的地方即可,而不会牵扯到不相关的地方。
便于扩展:此谓可扩展,就是你的代码或者模块要增加功能,只需要增加功能即可,而不会涉及到不相关的修改。
便于利用:此谓可复用,就是你的代码中有相同的功能部分应该是可以复用,不会出现相同的代码,也就是在你的代码中没有copy发生。
灵活性好:就是可以根据需求,把程序中相关的组件组合起来就可以达到客户的要求,而不需要大动干戈的去修改维护代码。
上面这几个基本原则是我们写代码时候应该注意的几个基本原则,只要我们能够坚守这些基本原则,相信你的代码不会太挫,下面进入今天的话题,这里要介绍的设计模式是简单工厂模式,直接上代码如下:
package com.ops.factory;
/**
* 主要工厂类
* @author xuecheng
*
*/
public class SimpleOperationFactory {
public static Operation createOperation(String type) {
Operation op = null;
switch (type) {
case "+":
op = new AddOperation();
break;
case "-":
op = new SubOperation();
break;
case "*":
op = new MultiOperation();
break;
case "/":
op = new DivOperation();
break;
default:
System.out.println("unknow operation type");
break;
}
return op;
}
}
package com.ops.factory.main;
import org.junit.Test;
import com.ops.factory.Operation;
import com.ops.factory.SimpleOperationFactory;
/**
* 客户端类
* @author xuecheng
*
*/
public class SimpleFactoryClient {
@Test
public void test() {
int numberA = 35;
int numberB = 7;
Operation op = SimpleOperationFactory.createOperation("+");
int result = op.getResult(numberA, numberB);
System.out.println("result = " + result);
}
}
怎么样?有木有感觉很简单?不错,确实很简单,但是关键是要从简单的事情里面看出有价值的东西,这里什么东西有价值呢?下面先来说说这种方法的好处:
它的好处就是工厂类(这里就是SimpleOperationFactory)中包含了必要的逻辑判断,它会根据客户端的选择条件选择实例化相应的类,这样的好处就是除去了与具体实现(这里就是AddOperation、SubOperation、MultiOperation、DivOperation)的依赖。但是也有有弊端,想一想如果我们要增加一种运算类XXX,我们除了要增加新运算XXX的新定义之外,还要修改工厂类SimpleOperationFactory,这里修改了原来的类,这可不是好办法,因为这样的话它就会违背“开放-封闭”原则,于是我们知道其实简单工厂模式除了有它的优点之外,它也有其它缺点。
针对这个缺点,有什么什么好的办法可以解决呢?放心,,,那么多设计模式总有解决方案能够绕过这个问题,于是工厂方法模式出来了,下一篇我们说说这个模式是怎么解决这个问题。