.NET FCL中工厂方法的实例:枚举器
- IEnumerable是工厂原型
- IEnumerator是产品原型
- List, ArrayList这些类都是建立产品的具体类,都实现了IEnumerable接口,有一个GetEnumerator()的方法返回IEnumerator
实现一个简单的工厂方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace DesignPattern.FactoryMethod
{
//工厂原型
interface IFactory
{
//建立产品的方法(这就是工厂方法?)
IProduct CreateProduct();
}
//产品原型
interface IProduct
{
string ProductName
{ set; get; }
int GetQty();
}
//具体工厂1
class Factory1 : IFactory
{
IFactory Members
}
//具体产品1
class Product1 : IProduct
{
IProduct Members
public override string ToString()
{
return string.Format("<Product 1>|ProductName={0}, GetQty={1}", ProductName, GetQty());
}
}
//具体工厂2
class Factory2 : IFactory
{
IFactory Members
//具体产品2
public class Product2 : IProduct
{
IProduct Members
public override string ToString()
{
return string.Format("<Product 2>|ProductName={0}, GetQty={1}", ProductName, GetQty());
}
}
}
class Program
{
static void Main(string[] args)
{
IFactory factory = new Factory1();
IProduct product = factory.CreateProduct();
Console.WriteLine(product);
factory = new Factory2();
product = factory.CreateProduct();
Console.WriteLine(product);
Console.ReadLine();
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace DesignPattern.FactoryMethod
{
//工厂原型
interface IFactory
{
//建立产品的方法(这就是工厂方法?)
IProduct CreateProduct();
}
//产品原型
interface IProduct
{
string ProductName
{ set; get; }
int GetQty();
}
//具体工厂1
class Factory1 : IFactory
{
IFactory Members
}
//具体产品1
class Product1 : IProduct
{
IProduct Members
public override string ToString()
{
return string.Format("<Product 1>|ProductName={0}, GetQty={1}", ProductName, GetQty());
}
}
//具体工厂2
class Factory2 : IFactory
{
IFactory Members
//具体产品2
public class Product2 : IProduct
{
IProduct Members
public override string ToString()
{
return string.Format("<Product 2>|ProductName={0}, GetQty={1}", ProductName, GetQty());
}
}
}
class Program
{
static void Main(string[] args)
{
IFactory factory = new Factory1();
IProduct product = factory.CreateProduct();
Console.WriteLine(product);
factory = new Factory2();
product = factory.CreateProduct();
Console.WriteLine(product);
Console.ReadLine();
}
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
· 终于决定:把自己家的能源管理系统开源了!
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(一):从.NET IoT入
· C#实现 Winform 程序在系统托盘显示图标 & 开机自启动
· ASP.NET Core - 日志记录系统(二)
· 实现windows下简单的自动化窗口管理