设计模式 | 抽象工厂模式
时间:2022-07-22
本文章向大家介绍设计模式 | 抽象工厂模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
说明
这个也是工厂模式, 我们看过简单工厂, 简单工厂会让该工厂的职责越来越重。这里有个抽象工厂, 为了解决由于工厂方法模式中每个工厂只创建一类实例对象, 导致工厂类过多。
我们可以将具体类组成一个类别, 由一个工厂来产生, 这就是抽象工厂
- 定义
提供一个创建一系列相关或相互依赖对象的接口, 而无需指定他们具体的类
- 应用场景
程序需要处理不同系统的相关产品, 但是客户不需要依赖于这些产品的具体类, 可以使用抽象工厂
示例
- 利用工厂模式 设计多个数据库操作,连接、命令发送等等 例如
mysql
oracle
...
<?php
/**
* Created by 憧憬.
*/
/**
* 定义连接约束
* Interface IConnection
*/
interface IConnection {
public function connect();
}
/**
* 定义命令约束
* Interface ICommand
*/
interface ICommand {
public function command();
}
/**
* mysql连接实现
* Class MysqlConnect
*/
class MysqlConnect implements IConnection {
public function connect()
{
echo 'mysql connect';
}
}
/**
* mysql命令发送
* Class MysqlCommand
*/
class MysqlCommand implements ICommand {
public function command()
{
echo 'mysql command';
}
}
/**
* 抽象工厂约束
* Interface IDataBase
*/
interface IDataBase {
public function getConnect();
public function getCommand();
}
/**
* mysql工厂实现
* Class MysqlServer
*/
class MysqlServer implements IDataBase {
public function getConnect()
{
return new MysqlConnect();
}
public function getCommand()
{
return new MysqlCommand();
}
}
$mysqlServer = new MysqlServer();
$mysqlServer->getConnect()->connect();
$mysqlServer->getCommand()->command();
如果我还需要oracle
操作我直接实现就ok
这里如果使用简单工厂 就需要修改整体结构,使用抽象工厂 只需要提供各个实现即可 最后实现工厂即可,当然抽象工厂模式同样具有工厂模式对结构要求高的缺点,整体结构的扩展或精简将变得更加的烦杂,所以使用抽象工厂模式时,对等级结构的划分是非常重要的。
本文为作者原创,手码不易,允许转载,转载后请以链接形式说明文章出处。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- java.util.concurrent.TimeoutException: 的解决!
- HTTP Status 503 - Server is shutting down or failed to initialize
- LinkedHashMap 源码剖析
- 基于SSM框架与Maven的CRUD案例
- Java 8的这个新特性,你用了吗?
- JSP+Servlet项目整合
- springboot 整合 Mybatis、JPA、Redis
- 数据库中设置列/字段自增(Oracle和Mysql)
- 数据库中日期的插入(Oracle和Mysql)
- 浅谈在进行jsp页面编程时,路径问题的解决(绝对路径与相对路径)
- 浅谈springMVC中,中文乱码的显示问题(持续更新)
- 数据库的优化方法,一般人我不告诉他(建议收藏)
- idea 远程调试
- 嘘!高效快速的刷访问量(偷偷收藏)
- 进行JDBC操作时,连接参数的配置(附DBUtil工具类)