1 设计模式之简单工厂(一)

       实际应用中会用到很多的设计模式,设计模式不属于技术实现,但是它会帮助你把代码实现得更优美,使用设计模式的目的就是要使你的代码便于维护、便于扩展、便于复用同时灵活性又好,下面对这几个词语解释解释:

便于维护:此谓可维护,就是你的代码可修改,什么叫可以修改呢?就是要修改的时候只需要修改要改的地方即可,而不会牵扯到不相关的地方。

便于扩展:此谓可扩展,就是你的代码或者模块要增加功能,只需要增加功能即可,而不会涉及到不相关的修改。

便于利用:此谓可复用,就是你的代码中有相同的功能部分应该是可以复用,不会出现相同的代码,也就是在你的代码中没有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,这里修改了原来的类,这可不是好办法,因为这样的话它就会违背“开放-封闭”原则,于是我们知道其实简单工厂模式除了有它的优点之外,它也有其它缺点。

针对这个缺点,有什么什么好的办法可以解决呢?放心,,,那么多设计模式总有解决方案能够绕过这个问题,于是工厂方法模式出来了,下一篇我们说说这个模式是怎么解决这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值