设计模式_工厂模式

    最近在看《大话设计模式》,通过这本书来学习关于设计模式的思想,该书通过有趣的例子让设计模式更加通俗易懂。

一个有趣的例子:

    通过曹操写诗,不断修改,让印刷的工匠不断刻板 头疼不已;联想到程序员日常开发过程中,面对产品、客户需求的不断变更

而使程序员不断修改代码,但面对已经 完成的代码,再去修改有可能面临全盘否定的重新再来的痛苦。

根本原因是我们写的代码,可维护性差、不易扩展、更谈不上复用。

学习了面向对象 的思想 封装、继承、多态,进阶则需要通过设计模式让程序更加的灵活、易于修改、易于复用。

一个计算器程序的引发的设计模式——工厂模式

first :

    写一个简单的程序

public double getResult(double num1,double num2,int operation){
		double result =0;
		switch (operation){
		case 1:
			result=num1+num2;
			break;
		case 2:
			result=num1-num2;
		break;
	}
		return result ;
	}

    这样写:用到了封装,讲业务逻辑和视图分开来写。

    以前的我在写程序时,基本也就是种情况,但是那里用到了继承和多态呢?

接下来的业务场景会让我们有所思考:

    1  新增一个 平方根的算法。

        解决方案 在switch 中添加一个分支。

         存在的风险有可能在修改时,将case1或者2的内容修改掉。

        或者 你所做的是公司的工资算法,在你新添加一个分支时则必须要向你提供以前的代码,这样会有很大风险,

         高内聚--带来的不便

    2  这时候我们用工厂设计模式来处理。

 

        a、工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。

        b、抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。

        c、具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现

//抽象的父类 
public abstract class Operation {
	public double number1=0;
	public double number2=0;
	//抽象方法
	public abstract double getResult();
	public double getNumber1() {
		return number1;
	}
	public void setNumber1(double number1) {
		this.number1 = number1;
	}
	public double getNumber2() {
		return number2;
	}
	public void setNumber2(double number2) {
		this.number2 = number2;
	}
}

//加法的实现
public class Operationjia extends Operation {
	@Override
	public double getResult() {
		return number1+number2;
	}
}

 


//减法的实现
public class Operationjian extends Operation {
	@Override
	public double getResult() {
		return number1-number2;
	}
}

 


//简单的工厂模式。
public class OperationFactory {	
	
	public static Operation createOperation(int operation){
		Operation  oper=null;
		switch(operation){
		case 1:
			//加法
			oper=new Operationjia();
			break;
		case 2:
			//减法
			oper=new Operationjian();
			break;
		}
		return oper;
	}
}

 


//测试demo
	public static void main(String[] args) {
		//1为加法,2为减法
		int a=2;
		Operation ope= new OperationFactory().createOperation(2);
		ope.setNumber1(2);
		ope.setNumber2(2);
		System.out.print(ope.getResult());
	}

输出结果:0.0

以上就是一个简单的工厂模式。

posted @ 2018-05-05 09:26  醉饮山河555  阅读(170)  评论(0编辑  收藏  举报