设计模式:简单工厂模式

2023-09-12 20:59:39

简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最简单方式,通过一个工厂类根据传入的参数来决定创建哪种产品类的实例。

在简单工厂模式中,有三个主要角色:

  1. 产品(Product):定义了工厂创建的对象的接口。
  2. 具体产品(Concrete Product):实现了产品接口的具体类。
  3. 工厂(Factory):负责创建产品对象的类。根据传入的参数,决定创建哪种具体产品的实例。

代码实现

interface Product {
    void operation();
}

// 具体产品A
class ConcreteProductA implements Product {
    @Override
    public void operation() {
        System.out.println("ConcreteProductA operation");
    }
}

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

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

// 示例用法
public class Main {
    public static void main(String[] args) {
        Product productA = Factory.createProduct("A");
        productA.operation(); // 输出:ConcreteProductA operation

        Product productB = Factory.createProduct("B");
        productB.operation(); // 输出:ConcreteProductB operation
    }
}

总结

简单工厂模式的优点是隐藏了对象的创建细节,客户端只需要通过工厂类来创建对象,而无需知道具体的实现细节。这样可以降低客户端与具体产品类之间的耦合度,提高代码的灵活性和可维护性。

然而,简单工厂模式的缺点是当需要添加新的产品时,需要修改工厂类的代码,违反了开闭原则。同时,工厂类负责创建多个产品对象,当产品类较多时,工厂类的职责会变得复杂。

总结来说,简单工厂模式适用于需要创建的对象较少且不会频繁变动的场景,它提供了一种简单而统一的对象创建方式。

更多推荐

毕业设计|基于stm32单片机的app视频遥控抽水灭火小车设计

基于stm32单片机的app视频遥控抽水灭火水泵小车设计1、项目简介1.1系统构成1.2系统功能2、部分电路设计2.1L298N电机驱动电路设计2.2继电器控制电路设计3、部分代码展示3.1小车控制代码3.1水泵控制代码4演示视频及代码资料获取1、项目简介视频简介中包含资料https://www.bilibili.co

自定义协议、序列化与反序列化

在编写TCP和UDP程序的时候,我们很自然的就使用了读取的函数对数据进行获取,对于UDP来说提供的是无连接的以数据报的形式进行传输,对于TCP来说是面向数据流的,在之前的程序中我们只是进行了读取的操作,但是并没有对读取的内容进行分析。那如果我们要传输一些结构化的数据的话,那么就需要引入"协议"这个概念。网络版计算器在本

前后端分离毕设项目之产业园区智慧公寓管理系统设计与实现(内含源码+文档+教程)

博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌🍅由于篇幅限制,想要获取完整文章或者源码,或者代做,拉到文章底部即可看到个人VX。🍅2023年-2024年最新计算机毕业设计本科选题大全汇总感兴趣的可以先收藏

如何选择适合你的隧道爬虫ip?

隧道爬虫IP在保护你的网络隐私和提供安全的数据传输方面起着关键作用。然而,在众多的商家中选择适合自己的并非易事。本文将分享一些关键的考虑因素,帮助你选择适合你的隧道爬虫IP商家。无论你是个人用户还是企业客户,相信这些指南都能帮助你做出明智的选择,确保你的网络连接安全可靠。一、明确你的需求1、安全性需求:确定你对数据隐私

webpack 基础配置

常见配置文件打包的出口和入口webpack如何开启一台服务webpack如何打包图片,静态资源等。webpack配置loader配置plugin配置sourceMap配置babel语法降级等接下来,我们先从webpack的基本配置开始吧!在准备配置之前,搭建一个webpack工程,你可以在自己的工程下npminit或者

spring怎么去引用/注入集合/数组类型和 怎么通过 util 名称空间创建 list以及 怎么去通过级联属性赋值

😀前言本章是spring基于XML配置bean系类中第3篇讲解了spring怎么去引用/注入集合/数组类型和怎么通过util名称空间创建list以及怎么去通过级联属性赋值🏠个人主页:尘觉主页🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉在csdn获奖荣誉:🏆csdn城市之星

VMware 三种网络连接模式

VMware虚拟机的三种网络连接模式:桥接,NAT,仅主机。网卡vmnet0,vmnet1,vmnet8区别。在VMware中,虚拟机的网络连接主要是由VMware创建的虚拟交换机负责实现的,VMware可以根据需要创建多个虚拟网络。VMware的虚拟网络都是以“VMet+数字”的形式来命名的,例如VMnet0,VMn

什么是内存碎片?

在嵌入式系统中,内存是十分有限而且是十分珍贵的,用一块内存就少了一块内存,而在分配中随着内存不断被分配和释放,整个系统内存区域会产生越来越多的碎片。因为在使用过程中,申请了一些内存,其中一些释放了,导致内存空间中存在一些小的内存块,它们地址不连续,不能够作为一整块的大内存分配出去,所以一定会在某个时间,系统已经无法分配

如何与Linamar Corp 建立EDI连接?

LinamarCorp(以下简称Linamar)是一家全球领先的汽车零部件制造商,总部位于加拿大。随着业务的不断扩展,Linamar需要与其供应商、分销商和合作伙伴之间实现更高效的业务交流和数据共享。为了提高业务流程的自动化水平,降低人工处理成本,并加强与合作伙伴之间的合作,Linamar决定实施EDI项目。Linam

【专业课130分】重邮801上岸经验分享

这个系列会邀请往届学长学姐进行经验分享~经验贴征集:前人栽树,后人乘凉,上岸同学也是看着经验贴一点一点过来的,有偿征集各位同学的经验分享,以此来帮助更多的学弟学妹们!经验不限,形式不限,各科经验均可,没有上岸也可以有失败经验。文章一经采用就会得到稿费,快来投稿吧!!!一、学长经验分享本篇是来自重庆邮电大学801专业课1

如何选择一只股票,待完善。

目录ROE(盈利能力)增长率(成长能力)收现比(营收质量)总资产周转率(经营能力)增长率(成长能力)商誉净资产比(排雷)流动比率(排雷)ROE(盈利能力)什么是ROE?ROE全名叫ReturnofEquity,翻成中文叫“股东回报率”,也叫"净资产收益率"。净资产收益率反映了一个公司的盈利能力,以及企业为股东创造价值的

热文推荐