​大家好,欢迎来到程序视点!我是你们的新朋友.安戈!

设计模式概述:创建型模式的基石

设计模式是软件开发中解决特定问题的经典方案模板,由四位软件工程师(GoF)在《设计模式:可复用面向对象软件的基础》中系统化提出。让我们先中其中的【创建型模式】开始。

【创建型模式】专注于对象创建机制,而工厂模式系列是其中最基础且实用的模式之一。

工厂模式的核心价值

工厂模式通过封装对象创建过程,提供以下优势:

  • 降低代码耦合度

  • 提高系统可扩展性

  • 统一对象创建接口

  • 简化复杂对象的创建过程

简单工厂模式深度解析

模式定义与角色划分

简单工厂模式(Simple Factory Pattern),又称静态工厂方法模式,包含三个核心组件:

  1. 工厂类(PhoneFactory):负责根据输入参数创建具体产品实例

  2. 产品抽象类/接口(Phone):定义所有产品的公共接口

  3. 具体产品类(HuaweiPhone/ApplePhone):实现抽象产品的具体功能

Java实现示例

// 产品接口
public interface Phone {
    String getDescription();
} // 具体产品实现
public class HuaweiPhone implements Phone {
    @Override
    public String getDescription() {
        return "华为旗舰智能手机";
    }
} public class ApplePhone implements Phone {
    @Override
    public String getDescription() {
        return "iPhone系列智能手机";
    }
} // 工厂类
public class PhoneFactory {
    public static Phone createPhone(String brand) {
        switch(brand.toLowerCase()) {
            case "huawei":
                return new HuaweiPhone();
            case "apple":
                return new ApplePhone();
            default:
                throw new IllegalArgumentException("不支持的手机品牌");
        }
    }
}

客户端调用方式

public class Client {
    public static void main(String[] args) {
        Phone huawei = PhoneFactory.createPhone("huawei");
        System.out.println(huawei.getDescription());
        
        Phone iPhone = PhoneFactory.createPhone("apple");
        System.out.println(iPhone.getDescription());
    }
}

模式优缺点与适用场景分析

优势体现

  • 封装创建逻辑:客户端无需了解对象创建细节

  • 接口统一:所有产品通过统一接口访问

  • 降低耦合:客户端与具体产品类解耦

显著缺陷

  1. 违反开闭原则:新增产品类型需修改工厂类源码

  2. 职责过重:工厂类集中了所有创建逻辑

  3. 扩展困难:产品类型增多会导致工厂类臃肿

典型应用场景

  • 产品类型较少且不频繁变化

  • 客户端不关心具体产品创建过程

  • 需要统一管理对象创建逻辑

演进方向:工厂方法模式

简单工厂模式虽然简单实用,但其扩展性问题催生了更灵活的工厂方法模式(Factory Method Pattern)

我们下一篇文章继续为你分享~


最后

【程序视点】助力打工人减负,从来不是说说而已!

后续安戈会继续详细分享更多实用的工具和功能。欢迎关注【程序视点】,这样就不会错过之后的精彩内容啦!

你的 「点赞/收藏」,安戈都看得见哦~

「设计模式详解」工厂模式:简单工厂模式原理、实现与优缺点分析 | 附Java代码示例的更多相关文章

  1. 设计模式详解及PHP实现:代理模式

    [目录] 代理模式(Proxy pattern) 代理模式是一种结构型模式,它可以为其他对象提供一种代理以控制对这个对象的访问. 主要角色 抽象主题角色(Subject):它的作用是统一接口.此角色定 ...

  2. JAVA设计模式详解(三)----------装饰者模式

    今天LZ带给大家的是装饰者模式,提起这个设计模式,LZ心里一阵激动,这是LZ学习JAVA以来接触的第一个设计模式,也许也是各位接触的第一个设计模式.记得当初老师在讲IO的时候就提到过它:“是你还有你, ...

  3. javascript设计模式详解之命令模式

    每种设计模式的出现都是为了弥补语言在某方面的不足,解决特定环境下的问题.思想是相通的.只不过不同的设计语言有其特定的实现.对javascript这种动态语言来说,弱类型的特性,与生俱来的多态性,导致某 ...

  4. javascript设计模式详解之策略模式

    接上篇命令模式来继续看下js设计模式中另一种常用的模式,策略模式.策略模式也是js开发中常用的一种实例,不要被这么略显深邃的名字给迷惑了.接下来我们慢慢看一下. 一.基本概念与使用场景: 基本概念:定 ...

  5. Java设计模式之-----工厂模式(简单工厂,抽象工厂)

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...

  6. 设计模式在cocos2d-x中的使用--简单工厂模式(Simple Factory)

    什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式.通过专门定义一个类来负责创建其它类的实例,被创建的实例 ...

  7. Javascript设计模式详解

    Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...

  8. 16个PHP设计模式详解

    说明:该教程全部截选自实验楼教程[16个PHP设计模式详解]:主要介绍16个常用的设计模式的基础概念和技术要点,通过UML类图帮助理解设计模式中各个类之间的关联关系,针对每种设计模式都使用PHP完成了 ...

  9. [ 转载 ] Java开发中的23种设计模式详解(转)

    Java开发中的23种设计模式详解(转)   设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类 ...

  10. Java温故而知新(5)设计模式详解(23种)

    一.设计模式的理解 刚开始“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把锁的模式,目 ...

随机推荐

  1. 5 easybr指纹浏览器内存修改教程

    目的 navigator.deviceMemory可以暴露设备的物理内存和运行状态,被用于设备唯一性识别或判断设备等级. 通过伪造这类信息,可以增强防关联.防追踪能力. easybr指纹浏览器提供演示 ...

  2. QQ会员首页HTML+CSS

    作为一个穷人,唯一一次逛这么久的会员首页还是因为要写最头大的web~苦涩 效果图 源码 <!DOCTYPE html> <html> <head> <meta ...

  3. geekai开源项目二次开发 AI大模型 AI 助手全套开源解决方案

    geekai-django 基于极客学长大佬的开源项目geekai 二次开发而来. GeekAI 是基于 AI 大语言模型 API 实现的 AI 助手全套开源解决方案,自带运营管理后台,开箱即用. 介 ...

  4. python3里面实现将日志文件写入当前脚本运行的文本中

    在 Python3 中,可以使用 logging 模块来实现将日志写入本地文本文件中.下面是一个简单的示例代码: import logging # 配置 logging 模块 logging.basi ...

  5. 简单介绍List和数组转List集合

    目录 综述 如何创建List 六种数组转List的方法 for循环遍历 Arrays.asList() new ArrayList<>(Arrays.asList(array)) Coll ...

  6. list.stream笔记-过滤-去重-转map、List等

    代码 import vo.PosDataDetailVo; import java.util.*; import java.util.stream.Collectors; public class A ...

  7. ubuntu18.04安装网易云音乐1.2.1提示“加载失败,网络错误,可以在设置中发送反馈”

    https://music.163.com/#/download 这是网易云的官网,右上角有下载Linux的链接 听说会出现无法打开网易云的问题,请参考这篇https://blog.csdn.net/ ...

  8. 【ASP.NET Core】调用 Web API 备份数据库

    老周不经意间翻了一下博客列表,上一篇水文竟然在 一个月前.啊,大海啊,全是水:时间啊,你跑得真快!过了一个月老周竟没感觉出来,可是这一个月里,好像啥事也没干成,就改了一下几个旧项目.也许是现在大环境真 ...

  9. idea里面怎么把自己项目添加maven

    首先你要清楚什么是maven: maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件.Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具 ...

  10. Redhat 7中文显示及中文输入法设置

    一.安装系统语言为中文(此步可以忽略) -1- 查看系统中文语言安装包 1 命令:yum list kde*chinese 结果:可用安装包 kde-l10n-Chinese.noarch Hint ...