抽象工厂模式
User.cs
IUser.cs
SqlserverUser.cs
AccessUser.cs
Department.cs
IDepartment.cs
SqlserverDepartment.cs
AccessDepartment.cs
IFactory.cs
SqlserverFactory.cs
AccessFactory.cs
Client.cs
小结:
- 本例分析:只有一个User类和User操作类时,是只需要工厂模式的,但现在加入新表,而且SQL Server与Access又是两大不同的分类,所以解决这种涉及多个产品系列的问题,用到了抽象工厂模式。
- 优点:最大的好处是易于交换产品系列,由于具体工厂类,如IFactory factory=new AccessFactory(),在一个应用中只需要在初始化时出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置;第二大好处是,它让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。
- 缺点:比如我们要增加项目表Project,至少要增加三个类,IProject、SqlserverProject、AccessProject,还需要更改IFactory、SqlserverFactory和AccessFactory才可以完全实现;另外,客户端程序类不只一个时,很多地方都在用IUser或IDepartment,每一个类在开始都会声明IFactory factory=new SqlserverFactory(),如果我有100个调用数据库的类,就要更改100次IFactory factory=new SqlserverFactory()。[此种情况时可以考虑用简单工厂模式+抽象工厂模式进行,随后也可以再过渡到反射+抽象工厂模式(反射+配置文件)]。
笑语欢歌水云间,
谈古论今郁作烟。
人存一世数十载,
生则壮志冲九天!