设计模式(3)抽象工厂模式

一、概述:

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

2、结构图:

3、举例代码:

(1) 实体:

复制代码
public interface IUser {
    public void insert(User user);
    public User getUser(int id);
}

public interface IDepartment {
    public void insert(Department department);
    public Department getDepartment(int id);
}

(2) SqlServer访问对象:

复制代码
public class SqlserverUser implements IUser{

    @Override
    public void insert(User user) {
        System.out.println("在Sql Server中给User表增加一条记录");
    }

    @Override
    public User getUser(int id) {
        System.out.println("在Sql Server中根据用户Id得到User表一条记录");
        return null;
    }
}

(3)Access访问对象

复制代码
public class AccessDepartment implements IDepartment{
    @Override
    public void insert(Department department) {
        System.out.println("在Access中给Department表增加一条记录");
    }

    @Override
    public Department getDepartment(int id) {
        System.out.println("在Access中根据用户Id得到Department表一条记录");
        return null;
    }
}

(4)工厂接口

复制代码
public interface IFactory {
    public IUser createUser();
    public IDepartment createDepartment();
}

(5)工厂类:

复制代码
public class SqlserverFactory implements IFactory{
    @Override
    public IUser createUser() {
        return new SqlserverUser();
    }

    @Override
    public IDepartment createDepartment() {
        return new SqlserverDepartment();
    }
}

public class AccessFactory implements IFactory{
    @Override
    public IUser createUser() {
        return new AccessUser();
    }

    @Override
    public IDepartment createDepartment() {
        return new AccessDepartment();
    }
}

(6)客户端:

复制代码
	User user = new User();
    Department department = new Department();

    IFactory factory = new SqlserverFactory();
  	//IFactory factory = new AccessFactory();

    IUser iu = factory.createUser();
    iu.insert(user);
    iu.getUser(1);

    IDepartment idept = factory.createDepartment();
   	idept.insert(department);
    idept.getDepartment(1);

输出:

复制代码
在Sql Server中给User表增加一条记录
在Sql Server中根据用户Id得到User表一条记录
在Sql Server中给Department表增加一条记录
在Sql Server中根据部门Id得到Department表一条记录

4、比较:

工厂模式中,重要的是工厂类,而不是产品类。返回的实例一定是工厂创建的,而不是从其他对象中获取的。区别:

简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力);

工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品) ;

抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族) 。

相关推荐
t***54417 分钟前
还有哪些设计模式适合现代C++
开发语言·c++·设计模式
t***54418 分钟前
如何在现代C++项目中有效应用这些设计模式
开发语言·c++·设计模式
贵慜_Derek1 小时前
我们能从 DeerFlow 学到哪些优秀的技术架构设计
人工智能·设计模式·架构
Q741_1471 小时前
设计模式之装饰器模式 理论总结 C++代码实战
c++·设计模式·装饰器模式
无籽西瓜a1 小时前
【西瓜带你学设计模式 | 第十八期 - 命令模式】命令模式 —— 请求封装与撤销实现、优缺点与适用场景
java·后端·设计模式·软件工程·命令模式
studyForMokey2 小时前
【Android面试】设计模式专题
android·设计模式·面试
geovindu3 小时前
go: Abstract Factory Pattern
开发语言·后端·设计模式·golang
木斯佳3 小时前
前端八股文面经大全:京东零售JDY前端一面(2026-04-14)·面经深度解析
前端·算法·设计模式·ai·断点续传
郝学胜-神的一滴3 小时前
[系统设计] 新鲜事系统:写扩散与读扩散的实现与对比
java·设计模式·php·软件构建·需求分析·软件设计·系统设计
老王以为18 小时前
深入理解 AbortController:从底层原理到跨语言设计哲学
javascript·设计模式·node.js