第四篇、抽象工厂模式的优化

本文探讨了如何优化抽象工厂模式,通过结合简单工厂和反射机制,实现在不修改现有工厂接口的情况下增加新产品。此外,还介绍了使用配置文件动态决定产品实例化的方案,进一步提高代码的灵活性和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一篇的博文中,我们研究了抽象工厂,我们简单的回顾一下:

首先,抽象工厂是为了应对产品簇的概念而生的。

其次,它使我们在不影响现有产品等级结构的基础上,方便的在不同产品系列当中进行切换。

最后,它封装了产品对象的创建过程,使之与客户端进行分离,无需客户端考虑他的组装过程。

但是,如果需求来自功能的增加,我们不仅要增加新的功能父类与产品系列子类,还需修改工厂接口以及所有子类工厂。

——————————————————————————————————————————————————————————————————

那我们有什么方式可以对抽象工厂进行优化呢,大家随我一起来看一下。

用简单工厂+抽象工厂的方式进行实现:

首先,对于产品的子类,我们不做修改

先是IUser以及其子类

public abstract class IUser {
	public abstract void insert(User user);
	public abstract User getUser(String id);
}

public class SqlServerUser extends IUser {
	
	@Override
	public void insert(User user) {
		// ......
		System.out.println("在SqlServer中插入User成功");
	}

	@Override
	public User getUser(String id) {
		User u = null;
		// ......
		System.out.println("在SqlServer中查询到了User");
		return u;
	}
}

public class AccessUser extends IUser {

	@Override
	public void insert(User user) {
		// ......
		System.out.println("在Access中插入User成功");
	}

	@Override
	public User getUser(String id) {
		User u = null;
		// ......
		System.out.println("在Access中查询到了User");
		return u;
	}

}
然后是IDepartment以及其子类

public abstract class IDepartment {
	public abstract void insert(Department deprecated);
	public abstract Department getDepartment(String id);
}

public class SqlServerDepartment extends IDepartment {

	@Override
	public void insert(Department department) {
		// ......
		System.out.println("在SqlServer中插入Department成功");
	}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值