05-工厂模式与简单工厂模式
05-工厂模式与简单工厂模式
简单工厂模式
计算器实现
package com.gof.simpleFactory;
/**
* 功能描述
*
* @since 2023-01-18
*/
public abstract class Operation {
private double num1;
private double num2;
public Operation() {
}
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;
}
public abstract void getResult();
}
package com.gof.simpleFactory;
/**
* 功能描述
*
* @since 2023-01-18
*/
public class AddOperation extends Operation {
@Override
public void getResult() {
System.out.println(getNum1() + getNum2());
}
}
package com.gof.simpleFactory;
/**
* 功能描述
*
* @since 2023-01-18
*/
public class SubtractOperation extends Operation {
@Override
public void getResult() {
System.out.println(getNum1() - getNum2());
}
}
package com.gof.simpleFactory;
/**
* 功能描述
*
* @since 2023-01-18
*/
public class MultiplyOperation extends Operation {
@Override
public void getResult() {
System.out.println(getNum1() * getNum2());
}
}
package com.gof.simpleFactory;
/**
* 功能描述
*
* @since 2023-01-18
*/
public class DivideOperation extends Operation {
@Override
public void getResult() {
if (getNum2() == 0) {
System.out.println("wrong num2");
} else {
System.out.println(getNum1() / getNum2());
}
}
}
简单工厂
package com.gof.simpleFactory;
/**
* 功能描述
*
* @since 2023-01-18
*/
public class OpeationFactory {
private static Operation operation;
public static Operation operate(String operator) {
switch (operator) {
case "+":
operation = new AddOperation();
break;
case "-":
operation = new SubtractOperation();
break;
case "*":
operation = new MultiplyOperation();
break;
case "/":
operation = new DivideOperation();
break;
}
return operation;
}
}
客户端
package com.gof.simpleFactory;
/**
* 功能描述
*
* @since 2023-01-18
*/
public class Client {
public static void main(String[] args) {
Operation operate = OpeationFactory.operate("-");
operate.setNum1(234);
operate.setNum2(1);
operate.getResult();
}
}
工厂模式
工厂模式相较与简单工厂模式,仅针对简单工厂的代码及客户端的代码进行改进
一个工厂接口和4个工厂类
package com.gof.factory;
/**
* 功能描述
*
* @since 2023-01-18
*/
public interface OperationFactory {
Operation createOperation();
}
package com.gof.factory;
/**
* 功能描述
*
* @since 2023-01-18
*/
public class AddFactory implements OperationFactory {
@Override
public Operation createOperation() {
return new AddOperation();
}
}
package com.gof.factory;
/**
* 功能描述
*
* @since 2023-01-18
*/
public class SubtractFactory implements OperationFactory {
@Override
public Operation createOperation() {
return new SubtractOperation();
}
}
package com.gof.factory;
/**
* 功能描述
*
* @since 2023-01-18
*/
public class MultiplyFactory implements OperationFactory {
@Override
public Operation createOperation() {
return new MultiplyOperation();
}
}
package com.gof.factory;
/**
* 功能描述
*
* @since 2023-01-18
*/
public class DivideFactory implements OperationFactory {
@Override
public Operation createOperation() {
return new DivideOperation();
}
}
客户端
package com.gof.factory;
/**
* 功能描述
*
* @since 2023-01-18
*/
public class Client {
public static void main(String[] args) {
AddFactory addFactory = new AddFactory();
Operation operation = addFactory.createOperation();
operation.setNum1(234);
operation.setNum2(1);
operation.getResult();
}
}
比较
简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖
工厂模式的优势在于遵循了开放封闭原则,对扩展开放,对修改封闭
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人