设计模式之——简单工厂模式
简单工厂模式又叫做静态方法工厂,它根据工厂类传入的参数,来动态决定应该创建哪个产品类。
简单工厂模式包含三个角色:
1.工厂角色:是该模式的核心,负责创建所有实例的逻辑。该类可以直接被其他类进行调用,从而创建出目标对象。
2.抽象产品角色:简单工厂模式所创建的所有对象的父类,它负责描述所有实例共有的公共接口。
3.具体产品角色:是简单工厂模式的创建目标,所有创建对象都是这个角色中的某个类的具体实例。
该模式的优点:
1.将程序结构化,工厂类负责所有实例的逻辑部分,调用者根据传入参数直接实例化工厂类中的目标实例即可。
2.分工比较明确,维护起来相对容易。
该模式的缺点:
1.违反了高内聚责任分配原则,它将全部的实例化逻辑集中到一个工厂实例类中。
2.如果系统所实例化类不断增多的时候,可能会使工厂类的逻辑变得复杂,维护起来需要一定的精力。
列举一个完整代码实例
共7个类:
1.Operation:运算类
2.OperationAdd:加法运算类
3.OperationSub:减法运算类(详细代码略)
4.OperationMul:乘法运算类(详细代码略)
5.OperationDiv:除法运算类(详细代码略)
6.OperationFactory:运算工厂类
7.Test:测试类
具体代码如下
Operation类
package operation;
/**
* @Author:byq
* @Date:2020/2/2
* @Description:运算类
* @version:1.0
*/
public class Operation {
private double num1;
private double num2;
public double getResult(){
double result = 0;
return result;
}
public double getNum1() {
return num1;
}
public void setNum1(double num1) {
this.num1 = num1;
}
public double getNum2() {
return num2;
}
public void setNum2(double num2) {
this.num2 = num2;
}
}
OperationFactory类
package operation;
/**
* @Author:byq
* @Date:2020/2/2
* @Description:工厂类,实例化具体类
* @version:1.0
*/
public class OperationFactory {
public static Operation createOperation(char operaction){
Operation oper = null;
switch (operaction){
case '+':
oper = new OperationAdd();//加算法
break;
case '-':
oper = new OperationSub();//减算法
break;
case '*':
oper = new OperationMul();//乘算法
break;
case '/':
oper = new OperationDiv();//除算法
break;
}
return oper;
}
}
OperationAdd类
package operation;
/**
* @Author:byq
* @Date:2020/2/2
* @Description:operation
* @version:1.0
*/
public class OperationAdd extends Operation {
/**
* 重写父类的方法,实现自己的加运算
* @return
*/
@Override
public double getResult(){
double result = 0;
result = getNum1()+getNum2();
return result;
}
}
Test类
package operation;
/**
* @Author:byq
* @Date:2020/2/2
* @Description:operation
* @version:1.0
*/
public class Test {
public static void main(String[] args){
//测试一个加运算
Operation oper = OperationFactory.createOperation('+');
oper.setNum1(1);
oper.setNum2(2);
double result = oper.getResult();
System.out.println("计算结果为:"+result);
}
}
运算结果截图
我是一名程序猿 发布了106 篇原创文章 · 获赞 38 · 访问量 7万+ 私信 关注