zoukankan
html css js c++ java
Head First设计模式学习笔记:工厂方法
.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
#region
IFactory Members
public
IProduct CreateProduct()
{
return
new
Product1()
{ ProductName
=
"
My Product 1
"
}
;
}
#endregion
}
//
具体产品1
class
Product1 : IProduct
{
IProduct Members
#region
IProduct Members
string
_productName;
public
string
ProductName
{
get
{
return
_productName;
}
set
{
_productName
=
value;
}
}
public
int
GetQty()
{
return
_productName.Length;
}
#endregion
public
override
string
ToString()
{
return
string
.Format(
"
<Product 1>|ProductName={0}, GetQty={1}
"
, ProductName, GetQty());
}
}
//
具体工厂2
class
Factory2 : IFactory
{
IFactory Members
#region
IFactory Members
public
IProduct CreateProduct()
{
return
new
Product2()
{ ProductName
=
"
My Inner Product 2
"
}
;
}
#endregion
//
具体产品2
public
class
Product2 : IProduct
{
IProduct Members
#region
IProduct Members
string
_productName;
public
string
ProductName
{
get
{
return
_productName;
}
set
{
_productName
=
value;
}
}
public
int
GetQty()
{
return
_productName.Length
*
2
;
}
#endregion
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();
}
}
}
查看全文
相关阅读:
53分(我的所有)请教:关于ClientDataSet新增记录问题(请富翁们关注!谢谢)
DBGrid显示行号的几种方法
现在序号加上,但怎么控制这一列不能拖动,换句话说不能获取焦点?
Delphi
巧妙修复delphi文件关联
cxGrid中有没有办法操作单个cell是否只读?
delphi cxgrid 使用方法
Delphi XE2 的控件安装方法。
舟山牙医 君子慎独 让你的DBGrid竖着站
DELPHI程序的自动升级功能的实现(AUTOUPDATE使用指南)
原文地址:https://www.cnblogs.com/rockniu/p/1224440.html
最新文章
IfcCompositeCurveSegment
【转载】 AI与人类首次空战,5:0大胜!40亿次模拟造美国怪兽,谁与争锋? (再次证明深度强化学习路线的正确性)
【转载】 5:0!AI战胜人类教官,AlphaDogfight大赛落幕
【转载】 无人机的四旋翼为什么不能运用到大型有人直升机上?
视频分享---------《无人机背后的PID控制》
对 大数据、人工智能 等技术的现有发展及未来应用展望---------(电视节目之纪录频道视频分享)
国产操作系统 “银河麒麟操作系统V10” 试用失败历程
【转载】 中枢模式发生器介绍
【转载】 机器人仿生控制方法研究
【转载】 介绍具有代表性的CPG控制机器人
热门文章
【转载】 PID算法的解析
P8 08 特征预处理-归一化
P4 04 特征工程的定义
P1 01 机器学习简介
P2 02 机器学习概述
ClientDataSet中动态添加计算字段并用计算字段显示记录的UpdateStatus
TClientDataSet[9]: 计算字段和 State
Delphi2010 DataSnap 学习(二)
用ClientDataSet更新数据表,怎样自动生成行号
TClientDataSet[25]: 自动增长字段(ftAutoInc) 与字段默认值
Copyright © 2011-2022 走看看