首页 > 其他分享 >设计模式——创建型——简单工厂模式

设计模式——创建型——简单工厂模式

时间:2024-04-29 15:15:11浏览次数:18  
标签:Product show 创建 void 工厂 new 设计模式 public

简单工厂模式

简单工厂模式把对象的创建和使用分离,使用者只关心产品的类型,而不需要知道产品创建的细节,用于产品类型较少且不经常变化,或是使用者不关心创建对象过程的情况

优点

封装好、拓展好、符合单一职责

缺点

违反开闭原则,工厂类职责负担较重

总结

本质可以看做是三个类,分别是:

  1. 一个抽象接口类

  2. 一个具体实现类

  3. 一个工厂类

抽象接口类负责定义产品接口,还可以声明产品的通用功能。

具体实现类需要继承抽象接口类,并且实现其声明的全部方法,也可以增加自己独有的方法。

工厂类实际上是一个普通的类,类内有一个创建产品的方法,返回的类型是抽象接口类,这个方法可以接受一个参数,以此来确定调用哪个实现类。

例子

// 抽象产品接口
public interface Product {
    void show();
}

// 具体产品类
// --具体产品类 B
public class ConcreteProductB implements Product {
    @Override
    public void show() {
        System.out.println("Concrete Product B");
    }
}

// --具体产品类 C
public class ConcreteProductC implements Product {
    @Override
    public void show() {
        System.out.println("Concrete Product C");
    }
}

// 工厂类
public class Factory {
    public Product createProduct(String type) {
        if ("B".equals(type)) {
            return new ConcreteProductB();
        } else if ("C".equals(type)) {
            return new ConcreteProductC();
        } else {
            throw new IllegalArgumentException("Invalid product type.");
        }
    }
}

// 调用
public class Main {
    public static void main(String[] args) {
        Factory factory = new Factory();

        Product productB = factory.createProduct("B");
        productB.show();

        Product productC = factory.createProduct("C");
        productC.show();
    }
}

标签:Product,show,创建,void,工厂,new,设计模式,public
From: https://www.cnblogs.com/MorningMaple/p/18165730

相关文章

  • 使用idea 在线创建springboot 项目-需联网
    1.打开idea,点击File,New,Project...2.配置项目名称和地址,配置jdk版本.配置完成点击Next等待导入依赖没有jdk17就下载一下想要在resources目录创建.yml结尾文件,按步骤操作选择Editor->FileandCodeTemplates选择files点击+号,输入名称,和文件类型.......
  • openGauss 创建和管理分区表
    创建和管理分区表背景信息openGauss数据库支持的分区表为范围分区表、间隔分区表、列表分区表、哈希分区表。范围分区表:将数据基于范围映射到每一个分区,这个范围是由创建分区表时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期,例如将销售数据按照月份进......
  • 一个库帮你轻松的创建漂亮的.NET控制台应用程序
    前言项目特性项目源代码新建控制台应用安装项目的NuGet包控制台文字输出table表格输出条形图日历布局规则水平线项目源码地址优秀项目和框架精选DotNetGuide技术社区交流群前言做过.NET控制台应用程序的同学应该都知道原生的.NET控制台应用程序输出的内容都......
  • webapi动态创建后台任务(使用排队的后台任务)
    很多时候我们都会使用后台定时任务,但有些任务不需要定时执行,只需要请求到来时执行一次,比如请求服务器到某个地方同步数据,但请求不需要等数据同步完成再响应。这时候就可以使用排队的后台任务。基本原理是用一个队列保存任务委托,然后用一个后台定时任务依次执行队列中的委托。MSD......
  • 23种设计模式笔记-创建型模式
    23种设计模式-创建型模式笔记模板模式前提-模式:概念:规则:实现细节:应用场景:示意图:代码实现:创建型模式单例、工厂方法、抽象工厂、生成器、原型。单例模式-共享独占资源概念:创建型设计模式,保证一个类只有一个实例,提供全局访问点来对单个实例进行访问规则:......
  • 创建vue项目
    【环境搭建】node环境搭建   退出ctrl+c --------------------------------------------------------------------------------------------------------------------------------------------------------------------------vue环境搭建      ......
  • vue工程化创建项目
    1、安装node.js地址:https://nodejs.org/en/download注意使用后缀名为LTS的,可以理解为标准版2、检查node.js版本node-v或者node--version出现版本号则说明安装成功(其他情况百度一下了解具体情况)用户@haodeMacBook-Air~%node-vv18.20.0haoquan@haodeMacBook-Ai......
  • 【Azure Event Hub】Schema Registry 在China Azure门户上不能创建的替代方案
    问题描述创建EventHub服务后,标准版的定价层功能中有SchemaRegistry的功能,但是根据官方文档,在门户中确无法创建。 问题解答什么是Azure架构注册表?Azure架构注册表是事件中心的一项功能,它为事件驱动的应用程序和以消息为中心的应用程序的架构提供一个中心存储库。它......
  • Angular cli 组件和服务的创建, 父传子,子传父,服务的简单使用
    1:Angularcli创建组件componentnggcomponentcomponents\rightnggcwave简写需要定位到根路径下即可创建组件CouldnotfindanNgModule.Usetheskip-importoptiontoskipimportinginNgModule.PSC:\myAngulrDemos\20240428demo\mydemo01\src>cd..PSC......
  • 状态设计模式
    为什么使用这个状态设计模式?在预约下单模块设计订单状态的时候有7种,用户下单之后变更为待支付,如果取消订单就修改为已取消,如果支付了就修改为派单中,之后服务人员和机构进行抢单或派单修改为待服务、开始服务修改为服务中、订单完成之后修改为已完成。如果有一处用户想取消订单,需......