抽象工厂模式
来源:互联网 发布:c 高级编程 第10版 编辑:程序博客网 时间:2024/06/03 20:40
抽象工厂(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。一般用反射,配置文件等方式实现。
1、易于交换产品系列。由于具体工厂类,在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。
2、它让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。
如果需求来自增加功能,此时,需要增加若干类,并修改相关的工厂类。
package gof23;public class AbstractFactoryTest {public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {//操作SqlServer数据库DataAccess.setFullyQualifiedName("gof23.Sqlserver");IUser user = DataAccess.createUser();user.insert(null);user.getUser(0);IDepartment dept = DataAccess.createDepartment();dept.insert(null);dept.getDept(0);System.out.println("\n"+"---------------我是华丽的分割线------------------"+"\n");//操作Mysql数据库DataAccess.setFullyQualifiedName("gof23.Mysql");user = DataAccess.createUser();user.insert(null);user.getUser(0);dept = DataAccess.createDepartment();dept.insert(null);dept.getDept(0);}}/* * 用户表的字段 */class User {private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}/* * 部门表的字段 */class Department {private int id;private String deptName;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getDeptName() {return deptName;}public void setDeptName(String deptName) {this.deptName = deptName;}}/* * 利用反射技术,去除switch或if,解除分支判断带来的耦合 */class DataAccess {private static String FullyQualifiedName;public static String getFullyQualifiedName() {return FullyQualifiedName;}public static void setFullyQualifiedName(String fullyQualifiedName) {FullyQualifiedName = fullyQualifiedName;}public static IUser createUser() throws InstantiationException, IllegalAccessException, ClassNotFoundException {String name = FullyQualifiedName + "User";return (IUser) Class.forName(name).newInstance();}public static IDepartment createDepartment() throws InstantiationException, IllegalAccessException, ClassNotFoundException {String name = FullyQualifiedName + "Department";return (IDepartment) Class.forName(name).newInstance();}}/* * 用户表的接口 */interface IUser{public void insert(User user);public User getUser(int id);}/* * Sqlserver用户表的实现 */class SqlserverUser implements IUser {@Overridepublic void insert(User user) {System.out.println("在SQL server中给User表增加一条记录");}@Overridepublic User getUser(int id) {System.out.println("在SQL server中根据ID得到User表一条记录");return null;}}/* * Mysql用户表的实现 */class MysqlUser implements IUser {@Overridepublic void insert(User user) {System.out.println("在Mysql中给User表增加一条记录");}@Overridepublic User getUser(int id) {System.out.println("在Mysql中根据ID得到User表一条记录");return null;}}/* * 部门表的接口 */interface IDepartment {public void insert(Department dep);public Department getDept(int id);}/* * Sqlserver部门表的实现 */class SqlserverDepartment implements IDepartment {@Overridepublic void insert(Department dep) {System.out.println("在SQL server中给Department表增加一条记录");}@Overridepublic Department getDept(int id) {System.out.println("在SQL server中根据ID得到Department表一条记录");return null;}}/* * Mysql部门表的实现 */class MysqlDepartment implements IDepartment {@Overridepublic void insert(Department dep) {System.out.println("在Mysql中给Department表增加一条记录");}@Overridepublic Department getDept(int id) {System.out.println("在Mysql中根据ID得到Department表一条记录");return null;}}
运行结果为:
在SQL server中给User表增加一条记录在SQL server中根据ID得到User表一条记录在SQL server中给Department表增加一条记录在SQL server中根据ID得到Department表一条记录---------------我是华丽的分割线------------------在Mysql中给User表增加一条记录在Mysql中根据ID得到User表一条记录在Mysql中给Department表增加一条记录在Mysql中根据ID得到Department表一条记录
0 0
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- 【模式】抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 工厂方法,抽象工厂模式
- 2,工厂模式--抽象工厂
- C#工厂模式-抽象工厂
- 工厂模式与抽象工厂
- 抽象工厂设计模式
- 抽象工厂模式
- 解决ListView嵌套ViewPager滑动不了的问题
- 考研路上的那些一战二战三战成功与失败的故事系列之四
- 16_自定义对话框
- MySQL服务优化参数设置参考1
- java 和 C 在网络编程中的问题
- 抽象工厂模式
- 什么函数不能申明为虚函数
- 【数据结构和算法分析】最大子序列求和问题及联机算法
- 考研路上的那些一战二战三战成功与失败的故事系列之五
- Ubuntu下配置Android开发环境
- 集打电话发信息与一身的应用
- 考研路上的那些一战二战三战成功与失败的故事系列之六
- Java类集(List接口-Vector)
- Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725