大话设计模式学习笔记-简单工厂 工厂 抽象工厂

主要内容来源于书上第15章。

我认为,书中以数据库的设计为例。

引言:如果不用设计模式,

那么一个产品,一个类,类太多了,就难以管理,这就出现了简单工厂,对外封装一个接口,在里面用分支判断处理多种产品创建。


第一要知道简单工厂,利用分支判断实现多种产品的创建。

缺点:增加新的产品时,就需要修改工厂类。
这就违反了开放封闭原则:软件实体(类、模块、函数)可以扩展,但是不可修改。

第二:如何让数据库适用以下变化
Q1:数据库不止一个,
Q2:每个数据库都增加(减少)表项


case1:使用工厂模式
工厂模式里仅只有一个工厂,
对于Q1,得另外创建工厂,忽略2个工厂的共性。
对于Q2,增加对应的表项,更改工厂里对应的函数;

case2:使用抽象工厂模式
而抽象工厂模式,
对于样例中,就是一个数据库,一个工厂。
抽象工厂模式中,有一个工厂接口,提炼出共性。较好的解决了Q1。
Q2问题,依然没有解决。

case3:使用抽象工厂模式+反射+(配置文件)
从列子中看,是取消了工厂接口。借鉴了简单工厂的程序框架,创建一个控制功能的类。

使用.net中的反射解决了多个数据库对象的问题,智能生成对象;
这种方法彻底解决了一个数据库一个工厂的问题,Q1 问题彻底解决。

对于Q2,影响只有一个类。
不像单一的抽象工厂,要修改所有的工厂和工厂接口。
而使用配置文件来配置数据库,可以减少编译代码,大大方便重用。


------------

本人总结后,发现以下问题

1. c++中没有反射概念,那么如上反射的应用有没有相应的替代方案。

2.书上15章,使用反射,其中删除了所有的工厂类,新建一个控制类,这里工厂都没有了,那怎么标题标记为:“15.8 用反射+抽象工厂的数据访问程序”


草草写了下,请指教。

posted @ 2012-08-12 13:06  os66  阅读(241)  评论(0编辑  收藏  举报