设计模式之简单工厂模式

简单工厂模式实现的目标是使业务层和界面进行分离。还是举例说明:

现在有一个需求让你实现类似计算机的加减乘除功能,如果我们不是用设计模式思想,把所有的业务代码写到一个类中,也能实现需求但是,如果增加新的需求呢?比如我在原来的基础上增加开根的需求,那么你就要对已经写好的代码进行更改,极有可能出现把已经完成的代码“破坏”的情况,而且不利于别人对项目的二次开发。下面我们引入简单工厂模式:先贴出代码(Java)

业务层code

package com.lava.FactoryPattern;
/*
 * 作为加减乘除的基类。
 */
public abstract class Operation {
	public  double numberA;
	public  double numberB;
	
	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;
	}

	public abstract double getResult();
}

package com.lava.FactoryPattern;
/*
 * 加操作
 */
public class OperationAdd extends Operation {
	
	@Override
	public double getResult() {
		// TODO Auto-generated method stub
		return numberA+numberB;
	}
}

package com.lava.FactoryPattern;
/*
 * 减操作
 */
public class OperationSub extends Operation {
	
	@Override
	public double getResult() {
		// TODO Auto-generated method stub
		return numberA-numberB;
	}
}

package com.lava.FactoryPattern;
/*
 * 乘操作
 */
public class OperationMul extends Operation {
	
	@Override
	public double getResult() {
		// TODO Auto-generated method stub
		return numberA*numberB;
	}
}

package com.lava.FactoryPattern;
/*
 * 除操作
 */
public class OperationDiv extends Operation {
	
	@Override
	public double getResult() {
		// TODO Auto-generated method stub
		return numberA/numberB;
	}
}

简单工厂:

package com.lava.FactoryPattern;
/*
 * 工厂模式
 */
public class OperationFactory {
	public Operation getOper(char c){
		Operation op=null;
		switch (c){
			case '+':
				 op=new OperationAdd();
				break;
			case '-':
				 op=new OperationSub();
				break;
			case '*':
				 op=new OperationMul();
				break;
			case '/':
				 op=new OperationDiv();
				break;
		}
		return op;
	}
}

控制台

package com.lava.FactoryPattern;
/*
 * 控制台
 */
public class Main {
	public static void main(String[] args) {
		Operation oa=new OperationFactory().getOper('+');
		oa.setNumberA(2);
		oa.setNumberB(3);
		System.out.println(oa.getResult());
	}
}

把所有的功能作为不同的类分开看似繁琐,但是有一个极大的优势,如果要增加新的功能你只需要在业务层增加一个OperationSqrt.class 代码就不写了。下面总结一下这样写的优势:

总结:

1、存在的条件是以基类作为基础、很多子类继承它。这要如果没有工厂模式。你需要在控制台上new很多的对象,失去了控制台的意义,控制台不需要知道你具体是怎么实现的,它只要通过'+','-','*','/' 符号,传入数,得到结果就行。

2、在有多个子类时,工厂类的作用是,通过控制台输入的信息,判断我要实例化那个子类(多态特性)。传给控制台即可。

3、有新的需求比如开根,只需要增加OperationSqrt.class,在控制台增加Operation oa=new  OperationFactory().getOper('sqr'); 这样实现了程序的灵活性,增强代码的可读性。

4、不需要更改已经写好的类。

简单工厂:控制台通过简单工厂模式知道具体调用了哪个子类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值