文章目录

  • 一、定义
  • 二、使用场景
  • 三、代码样例
    • 1.需求
    • 2.类图
    • 3.实体类
    • 4.产品类
    • 5.工厂类
    • 6.客户端
  • 四、优缺点
  • 结尾

一、定义

抽象工厂模式隶属于设计模式中的创建型模式,用于产品族的构建。抽象工厂是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象


二、使用场景

  • 系统中有多个产品系列,但每次只使用其中的某一系列产品。
  • 属于同一个产品系列的对象将在一起使用, 同一个产品系列中的对象可以是没有任何关系的对象, 但是它们都具有一些共同的约束

三、代码样例

1.需求

Access数据库中存在User和Department表的CRUD,现需更换DB到SqlServer数据库,提供方便快捷的更换方式

2.类图

3.实体类


/*** 用户实体类*/
public class User {private long id;private String name;public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
/*** 部门实体类*/
public class Department {private long id;private String deptName;public long getId() {return id;}public void setId(long id) {this.id = id;}public String getDeptName() {return deptName;}public void setDeptName(String deptName) {this.deptName = deptName;}}

4.产品类

/*** 用户访问接口*/
public interface IUser {//对数据库操作采取插入和查询(通过ID)void insert(User user);void getUser(int id);
}class SqlServerUser implements IUser {@Overridepublic void insert(User user) {System.out.println("在SqlServer数据库插入user记录");}@Overridepublic void getUser(int id) {System.out.println("在SqlServer数据库根据id获取user记录");}}class AccessUser implements IUser {@Overridepublic void insert(User user) {System.out.println("在Access数据库插入user记录");}@Overridepublic void getUser(int id) {System.out.println("在Access数据库根据id获取user记录");}}
/*** 部门访问接口*/
public interface IDepartment {void insert(Department dept);void getDept(int id);
}class AccessDepartment implements IDepartment {@Overridepublic void insert(Department dept) {System.out.println("在Access数据库插入department记录");}@Overridepublic void getDept(int id) {System.out.println("在Access数据库根据id获取department记录");}
}class SqlServerDepartment implements IDepartment {@Overridepublic void insert(Department dept) {System.out.println("在SqlServer数据库插入department记录");}@Overridepublic void getDept(int id) {System.out.println("在SqlServer数据库根据id获取department记录");}
}

5.工厂类

/*** 抽象工厂*/
public interface IFactory {IUser createUser();IDepartment createDepartment();
}class SqlServerFactory implements IFactory {@Overridepublic IUser createUser() {return new SqlServerUser();}@Overridepublic IDepartment createDepartment() {return new SqlServerDepartment();}
}class AccessFacotry implements IFactory {@Overridepublic IUser createUser() {return new AccessUser();}@Overridepublic IDepartment createDepartment() {return new AccessDepartment();}
}

6.客户端

/*** 客户端*/
public class Client {public static void main(String[] args) {User user = new User();Department dept = new Department();//IFactory factory = new AccessFacotry();IFactory factory = new SqlServerFactory();IUser iu = factory.createUser();iu.insert(user);iu.getUser(1);IDepartment idept = factory.createDepartment();idept.insert(dept);idept.getDept(1);}
}

四、优缺点

优点:

  • 1、易于更换产品系列,由于具体工厂类,在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同产品配置。

  • 2、它让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操作实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。

缺点:

  • 1.新增产品系列不方便
    如果要增加一个项目表Project,那么就需要增加三个类,IProject,AccessProject,SqlServerProject,还需要改动IFactory,AccessFactory,SqlServerFactory才可以完全实现。这样是很糟糕的。

结尾

  • 感谢大家的耐心阅读,如有建议请私信或评论留言。
  • 如有收获,劳烦支持,关注、点赞、评论、收藏均可,博主会经常更新,与大家共同进步

深入理解设计模式-抽象工厂模式相关推荐

  1. 系统架构技能之设计模式-抽象工厂模式

    一.上篇回顾 上篇我们主要讲述了简单工厂模式和工厂模式.并且分析了每种模式的应用场景和一些优缺点,我们现在来回顾一下: 简单工厂模式:一个工厂负责所有类型对象的创建,不支持无缝的新增新的类型对象的创建 ...

  2. 常见设计模式—抽象工厂模式

    设计模式-抽象工厂模式 1.什么是抽象工厂模式 抽象工厂模式是围绕一个超级工厂创建其它工厂,是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品. 2.角色分 ...

  3. 【JAVA进阶系列】JAVA 设计模式 -- 抽象工厂模式(Abstract Factory)

    [JAVA进阶系列]JAVA 设计模式 -- 抽象工厂模式(Abstract Factory) [1.1]抽象工厂模式简介 抽象工厂者模式的类结构图 AbstractProduct(抽象产品),Abs ...

  4. python工厂模式 理解_浅谈Python设计模式 - 抽象工厂模式

    声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在上一篇我们对工厂模式中的普通工厂模式有了一定的了解,其实抽象工作就是 表示针对 ...

  5. 深入理解设计模式-简单工厂模式vs工厂方法模式vs抽象工厂模式对比讲解

    文章目录 前言 一.简单工厂模式 1.描述 2.特点 3.优缺点 4.类图说明 二.工厂方法模式 1.描述 2.特点 3.适用场景 4.类图说明 5.简单工厂模式与工厂方法模式区别: 三.抽象工厂模式 ...

  6. C++设计模式--抽象工厂模式

    前言 前面有两篇文章分别介绍了简单工厂模式和工厂方法模式,这两种模式都比较常见,今天介绍工厂模式的最后一种,抽象工厂模式. 抽象工厂模式(Abstract Factory Pattern)是所有形态的 ...

  7. Java设计模式——抽象工厂模式

    文章目录 抽象工厂 概念 优缺点 优点 缺点 适用场景 代码案例 抽象工厂 使用工厂方法模式足以应付我们可能遇到的大部分业务需求. 但是当产品种类非常多时,就会出现 大量的与之对应的工厂类,这不应该是 ...

  8. C# 设计模式----抽象工厂模式

    原文地址:C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码), ...

  9. 设计模式—抽象工厂模式(java实现示例)

    一.相关定义 抽象工厂: 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种 ...

最新文章

  1. prometheus之docker监控与告警系列(二)
  2. python运维面试题_PYTHON运维开发面试题整理
  3. 取得NSDate实例各个字段的数字
  4. iOS设置拍照retake和use按钮为中文简体
  5. php 公众号验证回调方法_如何进行公众号文章收集 两种收集方法详解
  6. WX微信小程序路由API使用
  7. [渝粤教育] 中国地质大学 大学英语(4) 复习题
  8. 【重拾FPGA】三段式状态机的路口红绿灯
  9. Web 服务器性能与站点访问性能的优化思路
  10. Springboot 发邮件端口问题
  11. SQL学习(四)Where语句中的各种匹配方式
  12. MySQL 5.6 (Win7 64位)下载、安装与配置图文教程
  13. Luckysheet导出excel
  14. 在线Java 动态运行Java源代码-执行器
  15. 企业邮箱格式怎么写怎么申请邮箱?电子邮箱的正确填写地址
  16. python光标变粗了怎么办_Python 操作鼠标键盘 pyAutoGUI
  17. 用凯撒密码对喜欢的人表白
  18. php+js 五星评价,基于jquery实现五星好评
  19. 在微型计算机中 负数常用()表示,在微型计算机中,负数常用( )表示。
  20. DDL、DML介绍及常用语句

热门文章

  1. Java 将Word保存为WPS和WPT格式
  2. 计算机组成原理笔记[哈工大]
  3. mysql数据库中三张表的基本连接
  4. Question7:  针对诡异的HTML编码错乱问题个例
  5. 简单SOPC实例开发任务——控制led灯闪烁
  6. 还在使用Postman吗?out了兄弟,快来解锁Apifox这款国产化API工具吧
  7. 学习笔记-DataFrame求平均数,求众数
  8. HashMap1.7 扩容时产生死链
  9. 银行管理系统 - 2022计科实训QT课设
  10. Socket 套接字原理详解