创建型模式之简单工厂模式

博客围绕简单工厂模式展开,介绍了抽象产品角色,以Person接口及派生的Man、Women类为例,展示了具体实现代码。还给出了GodToCreate类负责创建对象的代码,以及客户端测试代码。强调模式核心是工厂类负责产品创建,实现了责任分割。
简单工厂模式是类的创建模式,又叫做静态工厂方法模式。就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。

一般涉及到三种角色:
    工厂类:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的类实现。
    抽象产品角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或她们共同拥有的接口。一般由接口或抽象类实现。
    具体产品角色:工厂方法模式所创建的任何对象都是这个角色的实例,由具体类实现。

以为例讨论该模式的具体实现:
    Person 人接口,规定人具有的一些共同特性
    Man 男人类,派生自Person接口
    Women 女人类,派生自Person接口
    GodToCreate 上帝造人类,负责男人和女人的创建工作。

Person.cs
using System;
namespace WindowsApplication5
{
 public interface Person
 {
  void eat();//吃饭
  void drink();//喝水
 }
}

Man.cs
using System;
namespace WindowsApplication5
{
 public class Man:Person
 {
  #region Person Members

  public void eat()
  {
   System.Windows.Forms.MessageBox.Show("狼吞虎咽...");
  }
  public void drink()
  {
   System.Windows.Forms.MessageBox.Show("咕咚咕咚...");
  }
  #endregion
 }
}

Women.cs
using System;
namespace WindowsApplication5
{
 public class Women:Person
 {
  #region Person Members

  public void eat()
  {
   System.Windows.Forms.MessageBox.Show("细嚼慢咽...");
  }
  public void drink()
  {
   System.Windows.Forms.MessageBox.Show("用鼻子先闻了闻...");
  }
  #endregion
 }
}

GodToCreate.cs
using System;
namespace WindowsApplication5
{
 public class GodToCreate
 {
  public static Person factory(int which)
  {
   if(which.Equals(0))
    return new Man();
   else if(which.Equals(1))
    return new Women();
   else
    return null;
         }

 }
}

On client, to test it as following:
private void button1_Click(object sender, System.EventArgs e)
  {
   Person one = GodToCreate.factory(1);
   one.eat();
   one.drink();
   one = GodToCreate.factory(0);
   one.eat();
   one.drink();
  }



模式的核心是工厂类,这个类负责产品的创建,而客户端可以免去产品创建的责任,这实现了责任的分割。

转载于:https://www.cnblogs.com/silva/archive/2005/07/27/201079.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值