程序员的偷懒 -- 设计模式之抽象工厂

模式这个东西从去看就开始看,先是看设计模式 那叫一个晕。

后来又有了“大话设计模式"这本书,才有些能够理解了。
但是理解和应用还是差了很远。
真正的使用从现在才开始。
为什么用模式呢,说明白了,就是为了少写代码了。为了软件容易维护。最近刚顿悟了抽像工厂,给大家举个例子,分享一下,嘿嘿。
抽像工厂在设计模式那本书中说明的好处是 可以使不同的产品族进行互相替换,可是怎么才叫互相替换呢?
考虑下面的情况。
老板让你写一个组业务类。
现在的状况,你只能用.Net Framework 2.0去写。但是你一直在学习3.5,想在日后把这些用3.5重写。
那么,在现在的情况下。你做如下工作。
把所有的类(你设计好的)都抽像成对应的接口。
定义一个工厂的接口,生成这些产品接口的实例。
用.Net Framewok 2.0去实现一个工厂和相应的类。
这样,你上层的开发人員在调用你的类库时,只需要实例一个2.0的工厂,再去生成这些实体类就可以了。当然,他看到的只是各种接口。

以后升级怎么办呢?
定义一个.Net Framework 3.5的工厂
定义一组3.5的实体类。
然后,让你的上层开发人員把那句实例2.0的工厂换成3.5的工厂就oK了。。

升级成功。。


但是还有一个不好的地方。。
就是 你的上层开发人員还 是需要改代码的。他得把2。0的工厂都改成3.5的工厂。 如果他只实例了一个工厂还好,如果是n个,他会很烦的。。。

那么这种情况下,就考虑使用单例。。
在你的类库里,设计一个静态方法,返回一个工厂的接口。
让你的上层开发人員用这个静态方法去实例一个工厂。
在2.0时代,你用这个方法给他返回一个2.0的工厂。
升级时呢?返回一个3.5的工厂就oK了。


这样,你这面做了变化,做了升级,可是你的上层开发人員什么都不用改。
够酷吧。
呵呵
一点小感想,文笔烂,大家不要笑啊。
欢迎cs||hit们拍砖啊。。。。


简单的代码

你的接口。
namespace yourName{
interface IProductA{}
interface IProdoctB{}
interface IFactory{
IProductA CreateA();
IProductB CreateB();
}
}
2.0j时代的代码
namespace yourName2{
class ProductA:IProductA{}
class ProcuceB:IProductB{}
class Factory:IFacotry{}
给它一个实例方法
class Global{
static IFactory GetInstance(){
return new yourName2.Factory();
}
}

现在升级到3.5啦。。。
实例类库
namespace yourName35{
class ProductA:IProductA{}
class ProductB:IProductB{}
class Facotry:IFactory{}
}
改一下Global
class Global{
static IFactory GetInstance{
return new yourName32.Factory();
}
}



你的上层开发人員,永远一个样子。。。
IFactory factory = Global.GetInstance();
IProcductA a = factory.CreateA();
IProcductB b = factory.CreateB();
posted @ 2008-11-12 16:11  葛云飞  阅读(309)  评论(0编辑  收藏  举报