简单工厂模式

/*模式定义:
定义:
专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类或接口。
简单工厂模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,
通常根据一个条件(参数)来返回不同的类的实例。
优缺点:
优点:
简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。通过它,
外界可以从直接创建具体产品对 象的尴尬局面中摆脱出来。
外界与具体类隔离开来,偶合性低。
明确区分了各自的职责和权力,有利于整个软件体系结构的优化。
缺点:
工厂类集中了所有实例的创建逻辑,容易违反GRASPR的高内聚的责任分配原则
虽然简单工厂模式能够适应一定的变化,但是它所能解决的问题是远远有限的。
它所能创建的类只能是事先教考虑到的,如果需要添加新的类,则就需要改变工厂类了。
(这个问题在下一个工厂方法模式将得到很好的解决)
应用情景
工厂类负责创建的对象比较少
客户只知道传入了工厂类的参数,对于始何创建对象(逻辑)不关心
package package0416;
import java.util.Scanner;
//运算父类,abstract抽象修饰符,不可以跟static,private,final同时修饰方法或者类
//abstract不能修饰局部变量或者成员变量以及构造方法
abstract class Operation {//运算抽象类,定义抽象方法,用于子类重载。
private double NumbBerA = 0;
private double NumberB = 0;
public Operation() {
}
public double getNumbBerA() {
return NumbBerA;
}
public void setNumbBerA(double numbBerA) {
NumbBerA = numbBerA;
}
public double getNumberB() {
return NumberB;
}
public void setNumberB(double numberB) {
NumberB = numberB;
}
public abstract void getResult();
}
//以下为加减乘除四各类,采用继承方法,重写GertResult方法,并返回result(double类型)
class OperationAdd extends Operation {
@Override
public void getResult() {
// TODO Auto-generated method stub
double result = 0;
result = this.getNumbBerA() + this.getNumberB();
System.out.println(result);
}
}
class OperationSub extends Operation {
@Override
public void getResult() {
// TODO Auto-generated method stub
double result = 0;
result = this.getNumbBerA() - this.getNumberB();
System.out.println(result);
}
}
class OperationMul extends Operation {
@Override
public void getResult() {
// TODO Auto-generated method stub
double result = 0;
result = this.getNumbBerA() * this.getNumberB();
System.out.println(result);
}
}
class OperationDiv extends Operation {
@Override
public void getResult() {
// TODO Auto-generated method stub
double result = 0;
if(this.getNumberB()==0){
System.out.println("除数不能为0");
return;
}
result = this.getNumbBerA() / this.getNumberB();
System.out.println(result);
}
}
class OperationFactory {
public static Operation createOperation(String operate) {
Operation opt = null;
switch (operate) {//根据字符串的不同,case判断产生不同的对象,以此实现简单工厂模式。
case "+":
opt = new OperationAdd();
return opt;
case "-":
opt = new OperationSub();
return opt;
case "*":
opt = new OperationMul();
return opt;
case "/":
opt = new OperationDiv();
return opt;
default:
return opt;
}
}
}
public class SimpleFactory {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
System.out.println("输入数字A");
double A=in.nextDouble();
System.out.println("输入数字B");
double B=in.nextDouble();
System.out.println("输入运算符+-*/其中一种");
String opt=in.next();
Operation opteration=OperationFactory.createOperation(opt);
opteration.setNumbBerA(A);
opteration.setNumberB(B);
opteration.getResult();
}
}