简单工厂模式(Simple Factory Pattern)

       简单工厂模式就是根据提供给它的数据,返回几个可能类中的一个类的实例.通常它返回的类都有一个共同的父类和共同的方法,但是每个方法执行的任务不同,而且根据不同的数据进行了优化。比如X是一个基类,xy和xz是从它派生出来的,XFactory类根据给出的参数决定返回那一个子类,返回那一个类的实例与程序员无关,因为这些类有同样的方法,只是实现不同,返回那个类的实例取决于工厂,工厂功能可能很复杂,但通常都是相当简间的.

接下来我们用一个例子来说明这个简单的工厂模式.假如我们要输入一个人的姓名,

有两个方式,一种是“firstname lastname” 和“fristname,lastname”形式.我们的任务就是要确定lastname和firstname是否是逗号来确定姓名的先后.

第一步,设计一个父类:

    public class CName {

           protected  string frName ,lName;

           public string getFristName() { return frName;}

           public string getLastName() { return lName;}

    }

 

第二步,设计两个子类,它是由类CName的派生的。它们现实了接口,并在构造function中将名字分成了两部分.在CFirstFirst类中,做了一个简单的假设:最后一个空格前面的所有部分都属与firstname.

    public class CFirstFirst : CName  {

               public CFirstFirst (string sName) {

                     int i = sName.Trim().Indexof(” “);

                     if ( i >0 ) {

                            frName  = name.Substring(0,i).Trim();

                            lName = name.Substring(i+1).Trim();

                      }

                      else  {

                             lName = sName;

                             frName = “”;

                      }

              }

      }

     在LastFist类中,用逗号给lastname划分界限.当空格或逗号不存在时,两个类都提供了错误校正处理.

        public class LastFrist  :CName  {

                          public LastFrist(string sName) {

                                   int i = sName.Indexof(”,”);

                                   if ( i>0 ) {

                                          if ( i >0 ) {

                            lName = name.Substring(0,i).Trim();

                            frName = name.Substring(i+1).Trim();

                      }

                      else  {

                             lName = sName;

                             frName = “”;

                      }

              }

      }

 

两种情况下,都把分开的名字保存在基类的CName中保护变量中.所以在派生类中根本不需要任何getFirstName和getLastName方法,因为基类中已给出.

第三步: 构造简单工厂.

     现在很容易给出简单工厂类.只检查逗号来决定返回那个类的实例

public class NameFactory ()

{

       public CName  getName(string sname)   {

                     int i = sname.Indexof(”,”);

                     if ( i >0 )

                                 return new LastFrist  (sname);

                     else

                                 return new CFirstFirst (sname);

       }

}

 

第四步。使用工厂类:

    string sName = “cedy hao”;

    NameFactory  nf = new NameFactory ();

    CName  name = nf.getName(sName);

    string sFristName = name.getFristName();

    string sLastName = name.getLastName();

    这种方法把和数据相关的问题与类的其它的方法分隔开来。

    一下次在实验“工厂方法模式(Factory Method  Pattern”.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值