作者注:工厂类方法的例子参考了这位老兄的文章:http://www.cnblogs.com/fortune/archive/2007/09/12/890729.html
这里是为了给大家展示一下工厂模式和扩展方法给大家编程带来的扩展性和灵活性。
啥也不说,直接上code :)先建立产品的抽象类:
1
using System;2
using System.Collections.Generic;3
using System.Linq;4
using System.Web;5

6
namespace DPTest.Factory7


{8
public abstract class AbstractCar9

{10
public string name = String.Empty;11
public abstract void Startup();12
public abstract void Run();13
public abstract void Turn();14
public abstract void Stop();15
}16
}17

再建立具体的产品类:
1
using System;2
using System.Collections.Generic;3
using System.Linq;4
using System.Web;5

6
namespace DPTest.Factory7


{8
public class HongQiCar : AbstractCar9

{10
public override void Startup()11

{12
13
}14

15
public override void Run()16

{17
}18

19
public override void Turn()20

{21
}22

23
public override void Stop()24

{25
}26

27
public HongQiCar()28

{29
this.name = "HongQi";30
}31

32
}33
}34

建立抽象工厂类:
1
using System;2
using System.Collections.Generic;3
using System.Linq;4
using System.Web;5

6
namespace DPTest.Factory7


{8
public abstract class AbstractFactory9

{10
public abstract AbstractCar CreateCar();11
}12
}13

再建立具体工厂类:
1
using System;2
using System.Collections.Generic;3
using System.Linq;4
using System.Web;5

6
namespace DPTest.Factory7


{8
public class HongQiCarFactory : AbstractFactory9

{10
public override AbstractCar CreateCar()11

{12
return new HongQiCar();13
}14
}15
}16

再建立个通用管理类:
1
using System;2
using System.Collections.Generic;3
using System.Linq;4
using System.Web;5

6
namespace DPTest.Factory7


{8
public class CarManager9

{10
public static AbstractCar GetHongQiCar(AbstractFactory factoryParameter)11

{12
AbstractFactory factory = factoryParameter;13
return factory.CreateCar();14
}15
}16
}17

这样一来,我们的红旗车工厂就建好了。哈哈,通用都破产保护了,我竟然还在建汽车工厂。说明中国的经济还是不错的嘛。
我现在想生产一辆红旗汽车,代码是相当的简单:
1
using System;2
using System.Collections.Generic;3
using System.Linq;4
using System.Text;5
using DPTest.Factory;6

7
namespace CSharpEssentialTest8


{9
class Program10

{11
static void Main(string[] args)12

{13
AbstractCar car = CarManager.GetHongQiCar(new HongQiCarFactory());14
Console.Write(String.Format("Car name:{0}", car.name));15
16
}17
}18
}19

现在用户提出了一个变态的要求,需要这个红旗汽车可以扭来扭去。难道我要重新见个工厂?没资金了,怎么办啊。
不要慌,c#3.0扩展方法来了:
先建立一个扩展类:
1
using System;2
using System.Collections.Generic;3
using System.Linq;4
using System.Text;5
using DPTest.Factory;6

7
namespace CSharpEssentialTest8


{9
static class CommonExtendedMethods10

{11
internal static void Twist(this AbstractCar car)12

{13
Console.Write(car.name + " is twisting.");14
}15
}16
}17

然后将我们原来的调用程序就可以用上这个方法了。
1
using System;2
using System.Collections.Generic;3
using System.Linq;4
using System.Text;5
using DPTest.Factory;6

7
namespace CSharpEssentialTest8


{9
class Program10

{11
static void Main(string[] args)12

{13
AbstractCar car = CarManager.GetHongQiCar(new HongQiCarFactory());14
Console.Write(String.Format("Car name:{0}", car.name));15
car.Twist();16
Console.ReadLine();17
18
}19
}20
}21

汽车真的可以扭来扭去了哦。
本文通过实例展示了如何使用工厂模式创建对象,并利用C# 3.0的扩展方法为现有类添加新功能,增强了程序的扩展性和灵活性。
415

被折叠的 条评论
为什么被折叠?



