一、抽象工厂
使用抽象工厂来切换数据库
首先抽取用户的新增和查询功能
![](https://i-blog.csdnimg.cn/blog_migrate/e9a0042453e13eaa8531f5fe109037fd.png)
分别用不同的数据库来实现用户的功能
![](https://i-blog.csdnimg.cn/blog_migrate/20df1f9e16858a9bc7a42ccffd85614c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8b23b13e7d1d2f16f4bb056734615b9d.png)
抽取工厂的功能,行为是一个创建用户实现的具体工厂工厂
![](https://i-blog.csdnimg.cn/blog_migrate/75471e04a9c68558b34fc768b597cecb.png)
具体工厂实现,返回具体的用户实现实例
![](https://i-blog.csdnimg.cn/blog_migrate/d82ee4f7a3e9a9be82e9e2c7d1afecc1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/caef994e9553105c03fc1b7572d0d164.png)
具体实现交由工厂来返回具体的实例,一定程度上进行了解耦
![](https://i-blog.csdnimg.cn/blog_migrate/71d0ad1da72d7b06881a24f79eae5d60.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e768e8a685dbd168333c9610b8fa8dad.png)
如果新增业务则为真正的抽象工厂,不同的产品使用不同的工厂
![](https://i-blog.csdnimg.cn/blog_migrate/bcf7dca1b1e479fb76d2bbe40d03f1ff.png)
![](https://i-blog.csdnimg.cn/blog_migrate/91ba6f59075b93534700344bcefada80.png)
![](https://i-blog.csdnimg.cn/blog_migrate/677f468eb100e38e361902c28e986415.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9940ef0639ef92937f46ece00349228a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2756a7b374788e97c7b5acb1ae06ffce.png)
![](https://i-blog.csdnimg.cn/blog_migrate/188cda0a8276480872fa35802f8b52be.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f373b9e277154cb12a17748fb60fa219.png)
![](https://i-blog.csdnimg.cn/blog_migrate/77591e459cfb35bf83f29dfd8b4d750d.png)
这样的抽象工厂还是有弊端,新增功能需要修改太多类,使用简单工厂和反射来改进抽象工厂
删除原先的工厂类,使用反射来获取真正的数据库
![](https://i-blog.csdnimg.cn/blog_migrate/23cefe32515c1a47a573e029437b1ec6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/aaf8e6718546e61e80b947956ff88aee.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d16a584dc7a4e15446f2261737ac3057.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cbe1ce810b99300fa1bc1e51bc100016.png)
![](https://i-blog.csdnimg.cn/blog_migrate/364e419ea6a5cae78b72d18a0a3dda4c.png)
这样就使用了简单工厂改进了抽象工厂
一、抽象工厂
使用抽象工厂来切换数据库
首先抽取用户的新增和查询功能
分别用不同的数据库来实现用户的功能
抽取工厂的功能,行为是一个创建用户实现的具体工厂工厂
具体工厂实现,返回具体的用户实现实例
具体实现交由工厂来返回具体的实例,一定程度上进行了解耦
如果新增业务则为真正的抽象工厂,不同的产品使用不同的工厂
这样的抽象工厂还是有弊端,新增功能需要修改太多类,使用简单工厂和反射来改进抽象工厂
删除原先的工厂类,使用反射来获取真正的数据库
这样就使用了简单工厂改进了抽象工厂