浏览:8572007-11-14 11:46   来自彭成刚      :

今天来看看工厂模式吧。。有些时候弄的复杂并不是什么好事,作为OO的精华,其实就应该理解为最简单的东东。。

我们在程序编制的时候可以用的上,这才是真理。对否。。吼吼。。

工厂要解决的是 "解偶" ,那么是解什么呢。。按照最简单的理解,就是变量而已。。对。。你可以这么去理解他。。

虽然我说的简单了,虽然我说的解释可能是错误的,但是确实最实用的。

来举个通俗的例子吧:
bagNum = 1 + 1 + 1 + 1 + 1;
那么bagNum 是几啊,据分析(半个小时就这么过去了)。。应该是5吧。。恩没错。。
现在是5个1,但是经过分宜第一个1和第五个1是属于小张的,而第2、3、4的1是属于小李的,他们的变化是统一的。
现在小张的一要变成2了,可以去修改语句,变异如下:
bagNum = 2 + 1 + 1 + 1 + 2;
但是如果现在我们经过了1个月的开发后,可不是5个数字这么简单了,已经由5个数字变成了200多个了,手动修改一定是疯了,所以语句再次变异:
zhangNum = 2;
liNum = 1;
bagNum = zhangNum + liNum + liNum + liNum + zhangNum ;
好了,解偶成功!
你们一定以为我很白痴吧。。o(∩_∩)o...。。现在我想说一句话,那就是:你现在有没有意识到,当你用new创建的一个实体对象就是这里的1 呢。。你还在 用着 1+1+1 的故事呢。。

比如数据库链接,创建了一个类叫db,那么你就 db db = new db(); 相当与1呢。。呵呵

工厂模式孕育而生。。

首先给出页面输出函数。。吼吼
 public class w
 {
  public static void s(string msg,System.Web.UI.Page page)
  {
   page.Response.Write(msg+"<br/>");
  }
 }
下面给出类代码,vs2003编译成功。。
public abstract class food
 {
  public food()
  {
  }

  public abstract void display(System.Web.UI.Page page);

 }
  /// <summary>
  /// mianbao 的摘要说明。
  /// </summary>
  public class mianbao : food
  {
   public mianbao()
   {
    //
    // TODO: 在此处添加构造函数逻辑
    //
   }

   public override void display(System.Web.UI.Page page)
   {
    w.s("mianbao",page);
   }
  }

  public class niunai : food
  {
   public niunai()
   {
   }
   public override void display(System.Web.UI.Page page)
   {
    w.s("niunai",page);
   }
  }

  public class myfactory
  {
   public myfactory()
   {
   }
   public static food returnF(string str)
   {
    if(str == "mianbao")
    {
     return new mianbao();
    }
    else if(str == "niunai")
    {
     return new niunai();
    }
    else
    {
     return new niunai();
    }
    
   }
  }
最后给出调用方法:
   food giveA = myfactory.returnF("mianbao");
   giveA.display(this.Page);
   food giveB = myfactory.returnF("niunai");
   giveB.display(this.Page);
页面输出结果:
mianbao
niunai

------------------------------
这样就把实例化的工作推迟到子类里创建了。。相当于变量的意味了。。好了就到这里了。。到这里了。。

 

 

楼主
  6个月前   shengnet      :
支持原创~~
回复  1楼 回到顶楼 
  6个月前   彭成刚      :
自己又看了一遍,好像思想跨越度有点大了。。呵呵。。
回复  2楼 回到顶楼 
  6个月前   麒麟.NET      :
这只是简单工厂啊……而且,楼主为什么每次都要把Page作为参数传入方法里呢?不如直接用HttpContext.Current
回复  3楼 回到顶楼 
  6个月前   彭成刚      :
多谢高手指点啊。。
原来的
w.s("mianbao",page);
就改成
System.Web.HttpContext.Current.Response.Write("mianbao<br />");
了。。甚是方便啊。。
回复  4楼 回到顶楼 
  5个月前   wenanry      :
支持原创!
回复  5楼 回到顶楼 
  4个月前   kevin002      :
不错,支持一下.
回复  6楼 回到顶楼 
  4个月前   冬虫草      :
支持一下!
回复  7楼 回到顶楼 
  3个月前   任力      :
回复  8楼 回到顶楼 

你还不是小组成员,加入小组以后才能发布新主题!
> 返回“设计模式”


其他话题

1 26752