GOF23设计模式之 工厂模式

Simple Factory Pattern.rar【GoF的简单工厂模式(C#源码)】 简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,通常它根据自变量的不同返回不同的类的实例。 简单工厂模式的实质是由一个工厂类根据传入的参量,动态决定应该创建出哪一个产品类的实例。简单工厂模式实际上不属于23个GoF模式,但它可以作为GoF的工厂方法模式(Factory Method)的一个引导。 UML: <<Interface>> ConcreteProduct Creator Product <------ --------------- <----- ------------- ------------- interface() interface() interface() * 工厂(Creator)角色:是简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。 * 抽象产品(Product)角色:是简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 * 具体产品(Concrete Product)角色:是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。 实例: 学校登录系统,SchoolUser类作为Product;SchoolPrincipal和SchoolTeacher类作为ConcreteProduct;SimpleFactory作为Creator。我已经用C#的源码编程了:请下载Simple Factory Pattern.rar 立即下载

工厂模式:

  • 实现了创建者与调用者的分离
  • 核心本质:
    • 实例化对象,用工厂方法代替new操作。
    • 将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的现实类解耦。
  • 详细分类:
    • 简单工厂模式
      • 用来生产同一个等级结构中的任意产品(对于增加新的产品,需要修改已有代码)
    • 工厂方法模式
      • 用来生产同一等级结构中的固定产品。(支持增加任意产品)
    • 抽象工厂方式
      • 用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)

面向对象设计的基本原则:

  • OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭
  • DIP (依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程。
  • LoD(迪米特法则,Law of Demeter):只与你直接朋友通信,而避免和陌生人通信。

简单工厂模式(静态工厂模式)代码实现:

/**
 * Audi和Byd实现了接口Car
 * @author chang
 *
 */
public class CarFactory {
    public static Car creatCar(String type){
    if(type.equals("奥迪")){
        return new Audi();
    }else if(type.equals("比亚迪")){
        return new Byd();
    }else{
        return null;
    }
    }
}
/**
 * 对比有无工厂模式
 * @author chang
 *
 */
public class Client01 {

    public static void main(String[] args) {
//  Car c1 = new Audi();
//  Car c2 = new Byd();

    //通过工厂模式有效的减少了创建Car对象时所要了解的信息。解耦效果明显
    Car c1 = CarFactory.creatCar("奥迪");
    Car c2 = CarFactory.creatCar("比亚迪");

    c1.run();
    c2.run();
    }

}
  • 简单工厂模式的另一种实现方式
package com.coderbean.factory.simplefactory;
/**
 * Audi和Byd实现了接口Car
 * @author chang
 *
 */
public class CarFactory2 {
   public static Car createAudi(){
       return new Audi();
   }

   public static Car createByd(){
       return new Byd();
   }
}
  • 要点:
    • 简单工厂模式也叫静态工厂模式,就是工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。
    • 对于增加新的产品无能为力!不修改代码的话,是无法扩展的。

工厂方法模式

  • 实现代码:
/**
 * 测试工厂方法模式
 * @author chang
 *
 */
public class Client {
    //这里CarFactory是一个接口,AudiFactory等都实现了这个接口。
    public static void main(String[] args) {
    Car c1 = new AudiFactory().creatCar();
    Car c2 = new BydFactory().creatCar();

    c1.run();
    c2.run();
    }

}
  • 工厂方法模式要点
    • 为了避免简单工厂模式的缺点,不完全满足OCP。
    • 工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。
  • 简单工厂模式和工厂方法模式的比较
    1. 结构复杂度(简单工厂优于工厂方法模式)
    2. 代码复杂度(简单工厂优于工厂方法)
    3. 客户端编程难度(简单工厂优于工厂方法)
    4. 管理上的难度(简单工厂优于工厂方法)
  • 根据设计理论:建议工厂方法模式。但实际上,我们一般都用简单工厂模式。

抽象工厂模式

  • 用来生产不同产品族的全部产品(对于新产品的增加,无能为力;支持增加产品族)
  • 抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。
  • 实现代码:略

工厂模式要点:

  • 简单工厂模式(静态工厂模式)
    • 虽然某种程度不符合设计原则,但实际使用最多
  • 工厂方法模式
    • 不修改已有类的前提下,通过增加新的工厂来实现扩展
  • 抽象工厂模式
    • 不可以增加产品,可以增加唉产品族!
  • 应用场景:
    • JDK中Calendar的getInstance方法
    • JDBC中Connection对象的获取
    • Hibernate中SessionFactory创建Session
    • Spring中IOC容器创建管理bean对象
    • XML解析时的DocumentBuilderFactory创建解析器对象
    • 反射中Class对象的newInstanceI()
设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML) 立即下载

相关推荐

Verilog与综合:数字逻辑的代码化革命及其未来挑战

本文深入探讨Verilog硬件描述语言与逻辑综合技术在数字芯片设计中的革命性作用。Verilog实现了数字逻辑的代码化描述,而综合技术则将其自动转换为门级网表,大幅提升设计效率。文章重点分析了在先进工艺节点下面临的时序、功耗和物理效应等挑战,并展望了AI驱动综合优化的未来发展方向。

postgres8guard的博客 801

GOF设计模式之“工厂模式”

工厂模式实现了创建者和调用者分离。 工厂模式详细分类可以有一下三种: 简单工厂模式 工厂方法模式 抽象工厂模式 简单工厂模式创建对象可以直接通过“工厂类”创建说需要的对象。 一个Car接口和两个实现类 /** * Car接口,带有一个run方法 * @author 90948 */ public interface Car { void run(); } public cla

码小菜(SunShuo)的先生的博客 498

weblogic等保测评操作过程

weblogic网络安全等级测评保护操作

qq_48257021的博客 2757

GOF设计模式之工厂模式

工厂模式实现了创建者与调用者分离。 工厂模式分为简单工厂模式,工厂方法模式以及抽象工厂模式。简单工厂模式:car接口: public interface Car { void run(); }//对car的继承 public class Benz implements Car{ @Override public void run() { System.out.pr

南瓜灯cc 617

STM32硬件SPI驱动W25Q128实战:从CubeMX配置到DMA高速读写(附完整代码)

本文详细介绍了如何使用STM32硬件SPI驱动W25Q128 Flash存储器,从CubeMX配置到DMA高速读写的完整实战指南。内容包括硬件连接方案、SPI参数优化、DMA配置技巧以及完整代码实现,帮助开发者快速掌握高速稳定的SPI Flash存储解决方案。

weixin_33734785的博客 184

RT_Thread Studio使用——USB虚拟串口(VCP)

RT_Thread Studio使用——USB虚拟串口(VCP)

weixin_44735205的博客 3374

GOF设计模式之旅------工厂模式

对于学完Java之后,很多人便直接进入JavaEE行列的开发或者Android的开发,但是最近看了各种书籍以及受软件体系结构课程的影响,越发觉得,GOF的23种模式是作为一个优秀程序员的基本素养,但是学习模式之后又不局限于模式之中。(正所谓:创建模式的人是大师,拘泥于模式的人永远是工匠。对于局限于模式之中,个人认为不应该在学习模式之后一味地专研这个方法我就一定得用23种模式中的一种,只有在合适的时

It's you 564

IPsec (主模式,野蛮模式)

IPsec vpn的主模式和野蛮模式

七汣的博客 3414

GOF23---工厂设计模式练习代码和随笔

GOF23学习练习代码 创建型设计模式 一、工厂方法 1.工厂类 /** * 抽象工厂 */ public interface PayFactory{ Pay getPayProduct(); } public class AlipayFactory implements PayFactory { @Override public Pay getPayProduct() { return new AlipayProduct(); } } pu

KevinLoveJava 446

OpenCode + Oh My OpenCode:打造你的终极AI编程团队(OpenCode新手入门指南)

本文详细介绍了开源终端AI编程助手 OpenCode 的完整配置教程 🖥️,从安装、AI模型配置到增强插件 Oh My OpenCode 的部署一应俱全。支持 Claude、ChatGPT、Gemini 多模型切换 🤖,还能实现多AI智能体协作开发。步骤清晰适合新手 📝,想在终端用AI写代码的开发者不要错过 ✨

XiaoqiangClub的博客 1万+

实验十一 ——————二层交换基础

实验内容实验网络拓扑图如上所示SW1以及SW2都创建VLAN10和VLAN20,按照上图所示,将接口添加到特定的VLAN;测试PC之间的连通性,要求相同VLAN内的PC能够相互通信要求设置两台交换机名称以及进行特权模式的密码,并允许通过Telnet方式管理交换机实验目的了解二层交换机工作原理掌握交换机基本配置命令理解VLAN的概念,掌握VLAN的配置理解trunk的概念,掌握trunk的配置实验步...

Fly_鹏程万里 1489

GOF23设计模式之工厂模式

GOF23设计模式之工厂模式   工厂模式实现了创建者和调用者的分离。    分为:简单工厂、工厂方法、抽象工厂  面向对象设计的基本原则: OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。 DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程。 ...

weixin_30278237的博客 93

AUTOSAR知识点 之 XCP (二):XCP基础概念

学习XCP的过程中,对XCP的基本概念要做一个全面的认知,因为里面有很多缩写以及难以理解的点,假设对此模模糊糊一知半解,那么对整个协议栈的认知会遇到极大的障碍。XCP的信号流传输图示如下XCP 标准主要分为 5 个部分:这部分提供了对于协议的一个概况介绍,包括 XCP 的功能和基础性内容。这部分内容对协议层进行了详细的规范和说明。

梦想技术家 2769

【GOF23设计模式】工厂模式

【GOF23设计模式】工厂模式 来源:http://www.bjsxt.com/一、【GOF23设计模式】_简单工厂模式详解、面向对象设计原则、开闭原则、依赖反转原则、迪米特法则 没有工厂模式的情况 1 package com.test.factory.simple; 2 3 public interface Car...

weixin_30319153的博客 147

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

GOF23设计模式(创建型模式)工厂模式

目录: 一:工厂模式的核心本质 二:关于面向对象的六大基本原则 三:工厂模式的三大类详解(代码示例,详细分析) 首先,上咱本GOF23所有工厂模式的分类表格!!! 创建型模式 单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式 结构型横式 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式 行为型模式 模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式

欢迎来到 Baret-H 的博客 1861

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

gof23——工厂设计模式详解

gof23——工厂设计模式详解一、简单工厂(静态工厂)模式二、工厂方法模式三、抽象工厂模式 一、简单工厂(静态工厂)模式 简单工厂模式(Simple Factory Pattern)是指由一个工厂对象决定要创建哪一种产品类的实例,不属于gof23.简单工厂适用于工厂类创建对象较少的场景,且客户端只要传入工厂类的参数,对于如何创建对象并不关心。 假设现在我们有一个课程场景,有一个课程接口,和java...

左耳依然的博客 318

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

GOF23种设计模式面试之三种工厂模式

简单工厂 简单工厂模式属于创建型模式,但是并不属于GOF23种设计模式,通过简单工厂模式,我们可以了解一下工厂模式相关的概念。 将实例化的操作放在一个类中,这个类就成为简单工厂类,简单工厂模式,定义了某一个工厂对象能够创建出哪一种产品类的实例。 借此将客户类和具体子类的实现进行解耦,客户端只注重于传入工厂类的参数,对于创建对象的逻辑不关心 例: 现在有一个抽象类Sword,可以打造各种剑 public abstract class Sword { public abstract void prod

u014792301的博客 513

GOF23设计模式——工厂设计模式

创建者模式: 工厂模式 实现创建者和调用者的分离。实例化对象,用工厂方法代替new操作,将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。 详细分类: • 简单工厂模式 用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已 有代码) • 工厂方法模式 用来生产同一等级结构中的固定产品。(支持增加任意产品) • 抽象工厂模式 用来生产不同产品族的全部产品。(对...

weixin_43117449的博客 1305

GoF 23种经典的设计模式——工厂模式

在工厂模式中,我们将对象的实例化过程移到一个独立的工厂类中,客户端通过调用工厂类的方法来创建对象,而不是直接使用 new 关键字实例化对象。工厂模式的优点在于它可以提供一种灵活的对象创建方式,可以根据需求动态地创建不同类型的对象。此外,工厂模式也符合单一职责原则,将对象创建的逻辑封装在工厂类中,使得代码更加可维护和可扩展。这样,客户端与具体的图形类解耦,可以通过工厂类来创建不同的图形对象,而无需关心对象创建的具体细节。工厂模式有多种变体,其中最常见的是简单工厂模式、工厂方法模式和抽象工厂模式。

Aft3rGl0w的博客 1042

GOF23种设计模式之工厂模式

工厂模式 工厂模式: 实现了创建者和调用者的分离。 详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 面向对象设计的基本原则: 单一职责原则 :应该有且只有一个原因引起类的变化 里氏替换原则 :只要父类能出现的地方,其子类就应该能出现。也就是用子类替换父类后,保证程序照样运行 DIP 依赖倒转原则 DependenceInversionPrinciple:要针对接口编程,不要针对实现编程...

qq_44066201的博客 408

GOF23种设计模式-工厂模式

工厂模式简单工厂模式工厂方法模式抽象工厂模式 分析: 修改代码可以接受,但是如果我们在其它的地方也有创建Pizza的代码,就意味着,也需要修改,而创建Pizza的代码,往往有多处。 思路: 把创建Pizza对象封装到一个类中,这样我们有新的Pizza种类时,只需要修改该类就可,其它有创建到Pizza对象的代码就不需要修改了.-> 简单工厂模式 简单工厂模式 简单工厂类 public class SimpleFactory { //简单工厂模式 也叫 静态工厂模式 public st

MARK19960120的博客 383

GOF23种设计模式之抽象工厂模式

抽象工厂模式 用来生产不同产品族的全部产品。(对于增加新的产品,无能为力; 支持增加产品族) 抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务 分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。 示例代码: 高低端发动机: package com.xyj.factory.abstractFactory; /** * 发动机接口 */ public interface...

qq_44066201的博客 387

厚积薄发打卡Day29 :[kuangStudy] GoF23通俗易懂的设计模式之 <工厂模式>

前言: 视频教程:狂神说Java之通俗易懂的23种设计模式 什么是设计模式? 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。 它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的 解决方案. 1995年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软 件的基础》一书,共收录了23种设计模式,从此树立了软件设计模式领域的里程碑,人称 【GoF设计模式】 GoF23: 一种思维,一种

COOLGWAYNE_TECH_BLOG 392

GOF23 设计模式 之工厂模式

工厂模式本质:实例化对象,工厂方法代替new操作;将实现类和创建对象统一管理和控制,将调用者和实现类解耦 工厂模式分为了三种 1,简单工厂模式: 最常用 对于新增产品 要修改代码 2,工厂方法模式: 新增产品不用修改代码 ,代码复杂度高 3, 抽象工厂模式: 可以增加产品族,进行产品之间的搭配 ,一般用的少, 框架可能会用到 ***************************...

wangrong111222的博客 132

【GoF23种设计模式+简单工厂模式】

设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码,让代码更容易被他人理解并且保证代码可靠性。设计模式一般包括:模式名称、问题、目的、解决方案、效果等组成要素,其中模式名称、问题、解决方案和效果是关键要素。在学习每一个设计模式时至少应该掌握如下几点:这个设计模式的意图是什么,它要解决一个什么问题,什么时候可以使用它;它是如何解决的,掌握它的结构图,记住它的关键代码;能够想到至少两个它的应用实例,一个生活中的,一个软件中的;

Pumpkin_O的博客 1243
上一篇: GOF23设计模式之 单例模式
下一篇: GOF23设计模式之 建造者模式
coderbean
博客等级 码龄11年 12粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值