好吧. 那我就献丑 献丑了!
看了那么多的回复, 个人感觉貌似都木有见到点子上.
好的 OO design 好处就是在你的需求变化下 你的client 可以适应这种变化而不需要
改动.
打个比方.
一个application 用办公室打印机的例子.
如果hard code like below:
Printer *pPrinter = new HP();
pPrinter->print();
如果有一天打印机变了准备用 canon的打印机. 那么你的client code 大约是这个样子.
Printer *pPrinter = new Canon();
pPrinter->print();
你的client 代码改动了. 因为你的需求变化了. 现在用canon打印机了.
OO design 的核心就是: 抽象不要依赖于实现, 相反实现要依赖于抽象.
好了, 再说一下 工厂模式的设计.
Idealy 应该你的代码是这样的:
Printer *pPrinter = FactorInstance("Configure_file");
pPrinter->print();
要把你的client的变化 引到外面去!
你的FactorInstance 这个对象 是读取一个config file 你们有类似于 printer =
canaon. 这样的字段. 然后FactorInstance 再根据相应的字段创建相应的object.
这样的好处就是你的client 代码不管需求如何变化, client代码是不用改动的.
打个比方 , 如果某天 , 需求又变了. 说 要用 brother 的打印机. 那么好了. 你就在
你的config file 你提供上 printer = brother 就可以 了.
当然你的 FactorInstance 你们再加上 if printer = brother then return new
Brother(); 类似于这样的语句 就可以了.
当然你需要加上 支持brother 的dll or so 啥驱动就好仂
这个也是符合软件 的 OCP 的设计原则. 即 对添加开放, 对改动关闭的原则!
所以这样的好处就是 以后需求变化, 你在config 你们改动, 然后在FactorInstance
那里添加一个判断. 再把相应的driver 拷贝进去就可以了. 那么你的client 的代码就
没有必要改动了.
个人理解, 如有不正确的地方, 请指正!