当前位置: 首页 > news >正文

二、工厂模式

一、普通工厂模式

1.1、模式定义:

  定义一个用于创建对象的接口,让子类决定去实例化哪一个类:其中的抽象工厂方法(factoryMethod),就是使得一个类的实例化延迟到了子类。
clipboard

1.2、应用场景

①、当使用者不知道要创建的对象的确切类型时候;
②、当使用者希望为库或者框架提供扩展其内部组件的方法时;

1.3、优点

  将具体要创建的对象和创建者解耦:
①、符合单一职责原则
②、符合开闭原则

1.4、一般工厂模式的实现方式
public class FactoryPattern {public static void main(String[] args) {Sender s = producer("mail");s.send();}public static Sender producer(String str){if ("mail".equals(str)){return new MailSender();}else if("sms".equals(str)){return new SmsSender();}else{System.out.println("传入参数有误");return null;}}
}interface Sender {void send();
}class MailSender implements Sender {public void send() {System.out.println("this is a MailSend");}
}class SmsSender implements Sender {public void send() {System.out.println("this is a SmsSender");}
}

上面代码的运行结果如下:
image

1.5、源码中的应用

  Tomcat源码中的TomcatURLStreamHandlerFactory.class,该类继承jdk源码URLStreamHandlerFactory.interface接口,如下所示:
clipboard

二、抽象工厂模式

2.1、模式定义

  提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类
clipboard

2.2、用途

①、只定义了产品和创建产品之间的关系,无需担心要具体要创建什么类型的产品;
②、程序只希望依赖产品的接口,而不希望依赖具体的实现类。

2.3、优点

①、符合单一职责原则
②、符合开闭原则

2.4、抽象工厂模式的实现方式
package factory;public class AbstractFactory {public static void main(String[] args) {//此处具体使用创建哪个产品的实例,就会创造出来哪个产品的实例//IDataBaseUtils相当于抽象工厂,而OracleDataBaseUtils,MysqlDataBaseUtils则是实际创建的工厂IDataBaseUtils oracleBaseUtils = new OracleDataBaseUtils();IConnection oracleConnection = oracleBaseUtils.getConnection();ICommand oracleCommand = oracleBaseUtils.getCommand();IDataBaseUtils mysqlBaseUtils = new MysqlDataBaseUtils();IConnection mysqlConnection = mysqlBaseUtils.getConnection();ICommand mysqlCommand = mysqlBaseUtils.getCommand();System.out.println("oracle具体工厂创建的实例:"+oracleConnection+".........."+oracleCommand);System.out.println("mysql具体工厂创建的实例:"+mysqlConnection+".........."+mysqlCommand);}
}interface IConnection{void connect();
}
interface ICommand{void sendCommand();
}
interface IDataBaseUtils{IConnection getConnection();ICommand getCommand();
}class MysqlConnection implements IConnection{@Overridepublic void connect() {System.out.println("MySql connect....");}
}class OracleConnection implements IConnection{@Overridepublic void connect() {System.out.println("Oracle connect....");}
}class MysqlCommand implements ICommand{@Overridepublic void sendCommand() {System.out.println("MySql send command");}
}class OracleCommand implements ICommand{@Overridepublic void sendCommand() {System.out.println("Oracle send command");}
}class MysqlDataBaseUtils implements IDataBaseUtils{@Overridepublic IConnection getConnection() {return new MysqlConnection();}@Overridepublic ICommand getCommand() {return new MysqlCommand();}
}class OracleDataBaseUtils implements IDataBaseUtils{@Overridepublic IConnection getConnection() {return new OracleConnection();}@Overridepublic ICommand getCommand() {return new OracleCommand();}
}

上面代码的运行结果如下:
image

2.5、源码应用
2.5.1、JDK源码中,java.sql.Connection.interface接口的子类

image

2.5.2、JDK源码中,java.sql.Driver.interface接口的子类

image

http://www.jsqmd.com/news/363068/

相关文章:

  • 成都物业隔油池清掏优质服务商推荐榜 - 优质品牌商家
  • 基于混合信号的小波包分解技术在故障特征提取中的MATLAB实现
  • 2026制药行业智能调节阀升级推荐榜 - 优质品牌商家
  • HBase在电商大数据分析中的典型应用
  • 终将看到繁星
  • 提示工程架构师:多学科交叉推动量子计算发展
  • ClickHouse 在大数据能源分析中的应用案例
  • 云端推理实战:如何优化AI原生应用的性能与成本
  • 第三章 数组
  • 2026年快速门厂家权威推荐榜:快速卷帘门厂家、快速车库门、快速门安装、磁吸门帘、钢质抗风门、高速卷帘门选择指南 - 优质品牌商家
  • shell 模拟实现
  • 【毕业设计】基于springboot的校园行政事务审批服务系统的设计与开发(源码+文档+远程调试,全bao定制等)
  • 2026工业智能调节阀优质推荐榜:防喘振调节阀/高压差角阀/高温熔盐阀/高温蝶阀/高频耐磨球阀/黑灰水球阀/选择指南 - 优质品牌商家
  • Java计算机毕设之基于springboot的办公自动化管理校园行政事务审批服务系统的设计与开发(完整前后端代码+说明文档+LW,调试定制等)
  • 电商系统大数据量订单导出的解决方案
  • 2026年滑升门厂家权威推荐榜:PVC快速门、pvc堆积式快速门、堆积工业门、堆积车库门、堆积门厂家选择指南 - 优质品牌商家
  • 2026年评价高的堆积门公司推荐:堆积车库门、堆积门厂家、堆积门采购、工业提升门、工业滑升门、工厂快速堆积门选择指南 - 优质品牌商家
  • 小清新数据结构题
  • 企查查开放强大的平台MCP:为AI智能体注入精准商业素材,驱动智能决策新时代
  • 程序员修炼之道——从小工到专家2
  • 基于C#实现多线程串口通信
  • 2026市场调研优质品牌推荐榜 助力企业决策 - 优质品牌商家
  • Robotics Toolbox for MATLAB
  • 光亚鸿道子公司科东软件荣获国家级专精特新“小巨人”企业授牌
  • Chapter14—中介者模式 - 教程
  • 统领工业 “智能大脑”,以根技术开启自主控制新纪元
  • ANELLO Photonics 与 Delta Black Aerospace 展开合作
  • GP8501 PWM转0-2.5V模拟电压模块原理图设计,已量产
  • 职业教育的“风口”已变!职业教育相关从业者,这波红利你赶上了吗?
  • Java毕设项目推荐-基于 SpringBoot 的高校办公室行政事务管理系统设计与实现基于springboot的校园行政事务审批服务系统的设计与开发【附源码+文档,调试定制服务】