简单工厂模式

来源:互联网 发布:域名注册 无需实名 编辑:程序博客网 时间:2024/06/02 12:34
这两天无意中下到一本c#的设计模式,比以前那本设计模式要好懂一些,做了一些总结,写一些出来和大家分享一下吧。 
基本结构是一个基础类BaseClassA,几个派生类DeriveClassB, DeriveClassC,DeriveClassD等等,基础类中定义了公共数据和取数据的方法,派生类中定义了构造函数和具体实现,还有一个工厂类FactroyClassA,这个类中定义了如何区别并返回不同的派生类的方法。这就是简单工厂模式的结构。
 
最后,应用程序只应该调用FactroyClassA类中的方法,并且把具体的判断条件给FactroyClassA就可以返回正确的派生类实体。
 
 
比如我们编制这么一个程序,私人支票管理程序,我们有几个不同的银行帐户和资产,当要出的钱大于10000时用一个帐户出款,小于10000时用另外一个帐户出款。
先编写一个基类:BankBase,该类中含有用户信息,姓名和帐号,该基类提供一个方法getmyinfo获取这两个信息
Class BankBase{
Protected name,accounts;
 
String getmyinfo(){return name+accounts}
}
然后编写几个类似以下代码的派生类,来决定具体返回什么值的变量:
Class BankA: BankBase{
BankA(){
name=”abc”;
accounts=”135465864”
}
}
最后编写Factory类,来决定返回哪个具体子类:
public class BankFactory
{
public BankBase GetMyBank(int num)
{
if (num>10000)
       return new ABank();
else
       return new BBank();
              }
}
这样,我们的模型就已经建立完成了,调用的时候只要申请一个BankBase类(bank),一个BankFactory类(bf)。然后调用:
bank=bf.GetMyBank(TheMoney);
就可以返回正确的帐户和姓名了,以后如果有新帐户出来,只要修改一下BankFactory,然后添加一个新帐户的类就可以了。
 
我觉得,简单工厂模式有个特点:
个各类之间的数据最好是同一类或者同一组数据,只是值不同。
有比较好的方法来区别各个类,返回正确的类
这样的情况下才比较适合用简单工厂模式