设计模式-简单工厂模式

        简单工厂模式是属于创建型模式,也叫做静态工厂方法。该模式就是定义了要给创建对象的类,由这个类来封装实例化的对象。

        例如要设计一个计算器程序,计算器会涉及加、加、乘、除等。如果传统的开发方式,直接写一个类,根据用户输入的符号进行指定的运算,虽然能实现功能,但加、加、乘、除等运算方法耦合度比较高,而且如果想要新增加一个计算方法,需要修改整个类,风险较高。

package designPattern.chap1;

import java.util.Scanner;

/*
 * 计算器控制台程序
 * 传统模式开发代码示例
 */
public class Demo1_1 {
   public static void main(String args[]) {
	   System.out.print("请输入数字:");
	   Scanner in = new Scanner(System.in);
	   int number1 = in.nextInt();
	   System.out.println();
	   System.out.print("请输入符号:");
	   Scanner in1 = new Scanner(System.in);
	   String str1 = in1.next();
	   System.out.print("请输入数字:");
	   Scanner in2 = new Scanner(System.in);
	   int number2 = in2.nextInt();
	   if(str1.trim().equals("+")) {
		   System.out.println(number1 + number2);
	   }else if(str1.trim().equals("-")) {
		   System.out.println(number1 - number2);
	   }else if(str1.trim().equals("*")) {
		   System.out.println(number1 * number2);
	   }
	   in.close();
	   in1.close();
	   in2.close();
   }
}

        类似计算器这样的问题,其实可以采用工厂模式来设计。采用工厂模式,可以实现计算和输入输出解耦。基于此可以先对计算过程进行一个抽象,定义一个计算方法getResult(就是对加、加、乘、除等具体计算过程的抽象),计算方法需要两个数据作为参数。采用VISIO的静态结构模板画出来的UML图以及代码分别如下。

package designPattern.chap1;

import java.util.Scanner;

/*
 * 启动类
 */
public class Demo1_1MainClass {
   public static void main(String args[]) {
	   Scanner in1 = null;
	   Scanner in2 = null;
	   Scanner in3 = null;
	   try {
		   System.out.print("请输入第一个数字:");
		   in1 = new Scanner(System.in);
		   double numberA = in1.nextDouble();
		   System.out.print("请输入运算符号:");
		   in2 = new Scanner(System.in);
		   String str = in2.next();
		   System.out.print("请输入第二个数字:");
		   in3 = new Scanner(System.in);
		   double numberB = in3.nextDouble();
		   OperationInterface operObject = OperationFactory.createOperation(str.trim());
		   System.out.println("结果是:"+operObject.getResult(numberA, numberB));
	   }catch(Exception e) {
		   System.out.println("计算异常:"+e.getCause().toString());
	   }finally {
		   in1.close();
		   in2.close();
		   in3.close();
	   }
	   
   }
}
package designPattern.chap1;
/*
 * 定义operationInterface接口
 */
public interface OperationInterface {
	  public double numberA = 0;
	  public double numberB = 0;
	  public double getResult(double numberA,double numberB); 
	
}

package designPattern.chap1;
/*
 * 加法实现操作
 */
public class OperationAdd implements OperationInterface{

	@Override
	public double getResult(double numberA, double numberB) {
		// TODO Auto-generated method stub
		return numberA+numberB;
	}

}
package designPattern.chap1;
/*
 * 乘法
 */
public class OperationMul implements OperationInterface{

	@Override
	public double getResult(double numberA, double numberB) {
		// TODO Auto-generated method stub
		return numberA*numberB;
	}

}
package designPattern.chap1;
/*
 * 减法
 */
public class OperationSub implements OperationInterface{

	@Override
	public double getResult(double numberA, double numberB) {
		// TODO Auto-generated method stub
		return numberA-numberB;
	}

}
package designPattern.chap1;
/*
 * 工厂类
 */
public class OperationFactory {
   
	  public static OperationInterface createOperation(String operaiton) {
		  OperationInterface operObject = null;
		  switch(operaiton) {
		  case "+":
			  operObject = new OperationAdd();
			  break;
		  case "-":
			  operObject = new OperationSub();
			  break;
		  case "*":
			  operObject = new OperationMul();
			  break;
		  }
		 return operObject; 
	  }
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunny_daily

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值