3.3工厂方法模式
来源:互联网 发布:mac全屏游戏怎么切换 编辑:程序博客网 时间:2024/06/13 07:59
http://blog.csdn.net/ailands/article/details/7190192
http://blog.csdn.net/niuyongjie/article/details/1493243
http://blog.csdn.net/robingaoxb/article/details/6184299
一个更加形象的例子---鸟生蛋
该例子的类图如下:
下面是程序的源代码:
鸟的类,它包含一个Produce()的抽象方法
using System;
namespace FactoryMethod
{
/// <summary>
/// Bird 的摘要说明。
/// </summary>
public abstract class Bird
{
#region 属性
protected string name;
#endregion
#region 方法
public Bird()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public Bird(string name)
{
this.name=name;
}
public string Name
{
get
{
return this.name;
}
}
public abstract Egg Produce();
#endregion
}
}
namespace FactoryMethod
{
/// <summary>
/// Bird 的摘要说明。
/// </summary>
public abstract class Bird
{
#region 属性
protected string name;
#endregion
#region 方法
public Bird()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public Bird(string name)
{
this.name=name;
}
public string Name
{
get
{
return this.name;
}
}
public abstract Egg Produce();
#endregion
}
}
鸡的类,它从鸟类继承下来
using System;
namespace FactoryMethod
{
/// <summary>
/// Class2 的摘要说明。
/// </summary>
public class Chicken:Bird
{
public Chicken()
{
//
// TODO: 在此处添加构造函数逻辑
//
this.name="鸡";
}
public override Egg Produce()
{
return new ChickenEgg();
}
}
}
namespace FactoryMethod
{
/// <summary>
/// Class2 的摘要说明。
/// </summary>
public class Chicken:Bird
{
public Chicken()
{
//
// TODO: 在此处添加构造函数逻辑
//
this.name="鸡";
}
public override Egg Produce()
{
return new ChickenEgg();
}
}
}
鸭子的类,从鸟类中继承
using System;
namespace FactoryMethod
{
/// <summary>
/// Duck 的摘要说明。
/// </summary>
public class Duck:Bird
{
public Duck()
{
//
// TODO: 在此处添加构造函数逻辑
//
this.name="鸭";
}
public override Egg Produce()
{
return new DuckEgg();
}
}
}
namespace FactoryMethod
{
/// <summary>
/// Duck 的摘要说明。
/// </summary>
public class Duck:Bird
{
public Duck()
{
//
// TODO: 在此处添加构造函数逻辑
//
this.name="鸭";
}
public override Egg Produce()
{
return new DuckEgg();
}
}
}
蛋类,它是一个抽象的类
using System;
namespace FactoryMethod
{
/// <summary>
/// Egg 的摘要说明。
/// </summary>
public class Egg
{
#region 属性
protected string name;
#endregion
#region 方法
public Egg()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public Egg(string name)
{
this.name=name;
}
public string Name
{
get
{
return this.name;
}
}
#endregion
}
}
namespace FactoryMethod
{
/// <summary>
/// Egg 的摘要说明。
/// </summary>
public class Egg
{
#region 属性
protected string name;
#endregion
#region 方法
public Egg()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public Egg(string name)
{
this.name=name;
}
public string Name
{
get
{
return this.name;
}
}
#endregion
}
}
鸡蛋的类(从蛋类继承)
using System;
namespace FactoryMethod
{
/// <summary>
/// ChickenEgg 的摘要说明。
/// </summary>
public class ChickenEgg:Egg
{
public ChickenEgg()
{
//
// TODO: 在此处添加构造函数逻辑
//
this.name="鸡蛋";
}
}
}
namespace FactoryMethod
{
/// <summary>
/// ChickenEgg 的摘要说明。
/// </summary>
public class ChickenEgg:Egg
{
public ChickenEgg()
{
//
// TODO: 在此处添加构造函数逻辑
//
this.name="鸡蛋";
}
}
}
鸭蛋的类(从蛋类继承)
using System;
namespace FactoryMethod
{
/// <summary>
/// DuckEgg 的摘要说明。
/// </summary>
public class DuckEgg:Egg
{
public DuckEgg()
{
//
// TODO: 在此处添加构造函数逻辑
//
this.name="鸭蛋";
}
}
}
namespace FactoryMethod
{
/// <summary>
/// DuckEgg 的摘要说明。
/// </summary>
public class DuckEgg:Egg
{
public DuckEgg()
{
//
// TODO: 在此处添加构造函数逻辑
//
this.name="鸭蛋";
}
}
}
客户端程序
using System;
namespace FactoryMethod
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
Chicken chicken=new Chicken();
System.Console.WriteLine(chicken.Name+" 生 "+chicken.Produce().Name);
Duck duck=new Duck();
System.Console.WriteLine(duck.Name+" 生 "+duck.Produce().Name);
System.Console.ReadLine();
}
}
}
namespace FactoryMethod
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
Chicken chicken=new Chicken();
System.Console.WriteLine(chicken.Name+" 生 "+chicken.Produce().Name);
Duck duck=new Duck();
System.Console.WriteLine(duck.Name+" 生 "+duck.Produce().Name);
System.Console.ReadLine();
}
}
}
程序运行的结果如下:
- 3.3工厂方法模式
- 工厂模式 -- 工厂方法
- 工厂模式-工厂方法
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式---工厂方法模式
- 【模式】工厂方法模式
- 工厂方法,抽象工厂模式
- C#工厂模式-工厂方法
- 工厂模式 和工厂方法
- 工厂模式-C-工厂方法
- 工厂模式以及工厂方法
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂方法、抽象工厂模式
- 工厂模式(简单工厂、工厂方法)
- 简单工厂|工厂方法|抽象工厂模式
- Web Services是什么?
- Linux 中断详解
- android Application Component研究之Activity(一)
- QT - USB-driver - libusb
- Django Web 应用的总体设计
- 3.3工厂方法模式
- android Application Component研究之Activity(二)
- ArcGis Server的集中地图服务WMS/WFS/WCS介绍
- jsp,action使用cookie实现记住登陆用户名
- 找不到 mysql.sock 的处理方法!
- sql语句中join用法大全
- jQuery实现AJAX定时局部页面刷新
- [转]如何为 iPad 打造速度超快的 HTML5 软件
- SQLite 获取当前时间