首页 > 其他分享 >简单工厂模式( Simple Factory Pattern )

简单工厂模式( Simple Factory Pattern )

时间:2024-06-09 19:43:38浏览次数:11  
标签:operation Simple Pattern Factory numA numB double Operation public

简单工厂模式(Simple Factory Pattern),在工厂类中对象决定创建出哪一种产品类的实例。这些产品类都实现了相同的接口,或者继承了相同的父类。

结构图

  • Factory工厂角色):它是核心,负责实现创建所有实例的内部逻辑。在工厂类中,提供了一个静态方法,可以直接被外界直接调用,以创建具体产品对象。
  • Product抽象产品角色):具体产品对象的父类或者接口,具体产品对象都是其子类对象。
  • ConcreteProduct具体产品类):它是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。

简单工厂代码

抽象产品角色

public abstract class Operation {
    /**
     * 获取两个数运算后的值
     *
     * @param numA 第一个数
     * @param numB 第二个数
     * @return 结果
     */
    public abstract double getResult(double numA, double numB);
}

具体产品类,包括加法、减法、乘法、除法四个运算的具体实现

public class Add extends Operation {
    @Override
    public double getResult(double numA, double numB) {
        return numA + numB;
    }
}
public class Sub extends Operation {
    @Override
    public double getResult(double numA, double numB) {
        return numA - numB;
    }
}
public class Mul extends Operation {
    @Override
    public double getResult(double numA, double numB) {
        return numA * numB;
    }
}
public class Div extends Operation {
    @Override
    public double getResult(double numA, double numB) {
        if (numB == 0) {
            System.out.println("除数不能为0");
        }
        return numA / numB;
    }
}

工厂类

public class OperationFactory {
    public static Operation createOperation(String operate) {
        Operation operation = null;
        switch (operate) {
            case "+":
                operation = new Add();
                break;
            case "-":
                operation = new Sub();
                break;
            case "*":
                operation = new Mul();
                break;
            case "/":
                operation = new Div();
                break;

        }
        return operation;
    }
}

客户端

class Client {
    public static void main(String[] args) {
        Operation operation = OperationFactory.createOperation("+");
        operation.getResult(1, 1);
    }
}

标签:operation,Simple,Pattern,Factory,numA,numB,double,Operation,public
From: https://www.cnblogs.com/cavan2021/p/18239417

相关文章

  • Paxos Made Simple
    1Introduction  Paxos算法是莱斯利·兰伯特(LeslieLamport)于1990年提出的一种基于消息传递且具有高度容错特性的共识(consensus)算法。《ThePart-TimeParliament》最早发表于1998年,Paxos岛上有一个议会,这个议会来决定岛上的法律,而法律是由议会通过的一系列的法令定义的。当议......
  • 1_关于BeanFactory与ApplicationContext的联系和区别
    BeanFactory与ApplicationContext1.容器和接口1.1BeanFactory与ApplicationContext的联系与区别:ConfigurableApplicationContext是ApplicationContext的子接口,而ApplicationContext接口又是BeanFactory的子接口。因此ConfigurableApplicationContext接口简介继承了Bean......
  • vits-simple-api搭建
    根据vits-simple-api中文文档指南自行搭建后端以下步骤均在windows平台cpu推理搭建为例选择你的vits模型(注意是vits!不是So-VitsBertVits2GptVits)建议去抱脸网搜索或者b站搜素以及自己训练.在vits-simple-api的路径的model目录下新建你下载模型的名字的文件夹将......
  • 设计模式:命令模式(Command Pattern)及实例
     好家伙, 0.什么是命令模式在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象......
  • vue3 + arcgis.js4.x---线段SimpleLineSymbol
    //polylineconstpolylineGraphic=newGraphic()polylineGraphic.geometry={type:'polyline',paths:[[117.227239,31.820586],[116.227239,33.820586]]}polylineGraphic.symbol=newSimpleLineSymbol({color:'#ff0000&#......
  • vue3 + arcgis.js4.x---面SimpleFillSymbol
    //polygonconstpolygonGraphic=newGraphic()polygonGraphic.geometry={type:'polygon',rings:[[117.227239,31.820586],[116.227239,33.820586],[117.227239,33.820586]]}polygonGraphic.symbol=newSimpleFillSymbol({......
  • vits-simple-api搭建与使用
    根据vits-simple-api中文文档指南自行搭建后端以下步骤均在windows平台cpu推理搭建为例选择你的vits模型(注意是vits!不是So-VitsBertVits2GptVits)建议去抱脸网搜索或者b站搜素以及自己训练.在vits-simple-api的路径的model目录下新建你下载模型的名字的文件夹将......
  • 关于tomcat中servlet的url-pattern匹配规则
    首先需要明确几容易混淆的规则:servlet容器中的匹配规则既不是简单的通配,也不是正则表达式,而是特定的规则。所以不要用通配符或者正则表达式的匹配规则来看待servlet的url-pattern。Servlet2.5开始,一个servlet可以使用多个url-pattern规则,标签声明了与该servlet相应的匹配......
  • java中SimpleDateFormat解析日期格式的问题
    在日常写代码的过程中,我们经常要处理各种格式的日期,常见的日期格式有:“20240601”,“2024-06-01”,“2024-6-1”。如何正确地处理日期格式,尤其是对外接口中参数的日期格式,就很重要了,一个不小心就可能出现意想不到的问题。举一个我遇到的真实例子:我们提供的对外接口中有一个参数是......
  • 05beanfactory后置处理器
    BeanFactory后处理器的作用作用与bdMap创建完成后,通过对bdMap的操作(新增)来实现更多的功能拓展ConfigurationClassPostProcessor可以解析@ComponentScan@Bean@Import@ImportResourceMapperScannerConfigurer可以解析Mapper接口@ComponentScan,@Bean,@Ma......