* 模式分析
在以下情况下应当考虑使用抽象工厂模式
~ 一个系统不应当依赖于产品类实例如何被创建,组合和表达的细节,这对于所有形态的
工厂模式都是重要的
~ 一个系统有多于一个的产品族,而系统只消费其中一产品族.
~ 同属于一个产品族的产品是在一起使用的.这一约束必须在系统的设计中体现出来.
~ 系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现.
* 源码分析
控制台程序 Program.cs

1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
/*该源码由邹江平2008-8-14编写,如有学习者请与QQ:200580231联系*/
5
namespace X8023Z
6
{
7
class Program
8
{
9
static void Main(string[] args)
10
{
11
// 创建并运行非洲动物世界。
12
ContinentFactory africa = new AfricaFactory();
13
AnimalWorld world = new AnimalWorld(africa);
14
world.RunFoodChain();
15
16
// 创建并运行美洲动物世界。
17
ContinentFactory america = new AmericaFactory();
18
world = new AnimalWorld(america);
19
world.RunFoodChain();
20
Console.WriteLine("请按任意键退出 !");
21
Console.Read();
22
}
23
}
24
25
abstract class ContinentFactory //抽象工厂(大陆)
26
{
27
abstract public Herbivore CreateHerbivore();//创建草食动物
28
abstract public Carnivore CreateCarnivore();//创建肉食动物
29
}
30
31
class AfricaFactory : ContinentFactory //具体工厂(非洲)
32
{
33
override public Herbivore CreateHerbivore()
34
{ return new Wildebeest(); }
35
36
override public Carnivore CreateCarnivore()
37
{ return new Lion(); }
38
}
39
40
class AmericaFactory : ContinentFactory //具体工厂(美洲)
41
{
42
override public Herbivore CreateHerbivore()
43
{ return new Bison(); }
44
45
override public Carnivore CreateCarnivore()
46
{ return new Wolf(); }
47
}
48
49
abstract class Herbivore //抽象产品(草食动物)
50
{
51
}
52
53
abstract class Carnivore //抽象产品(食肉动物)
54
{
55
abstract public void Eat(Herbivore h);
56
}
57
58
class Wildebeest : Herbivore //产品(羚羊)
59
{
60
}
61
62
class Lion : Carnivore //产品(狮子)
63
{
64
override public void Eat(Herbivore h)
65
{
66
// 吃肉食
67
Console.WriteLine("狮子吃 " + h);
68
}
69
}
70
71
class Bison : Herbivore //产品(野牛)
72
{
73
}
74
75
class Wolf : Carnivore //产品(狼)
76
{
77
// Methods
78
override public void Eat(Herbivore h)
79
{
80
// 吃肉食
81
Console.WriteLine( " 狼吃 " + h);
82
}
83
}
84
85
class AnimalWorld //程序客户端
86
{
87
private Herbivore herbivore;
88
private Carnivore carnivore;
89
90
public AnimalWorld(ContinentFactory factory)
91
{
92
carnivore = factory.CreateCarnivore();
93
herbivore = factory.CreateHerbivore();
94
}
95
96
public void RunFoodChain()
97
{
98
carnivore.Eat(herbivore);
99
}
100
}
101
102
}
/*该源码由邹江平2008-8-14编写,如有学习者请与QQ:200580231联系*/
* 补充说明
抽象工厂模式以一种倾斜的方式支持增加新的产品,为新产品族的增加提供方便
而不能为新的产品等级结构的增加提供这样的方便.
在以下情况下应当考虑使用抽象工厂模式
~ 一个系统不应当依赖于产品类实例如何被创建,组合和表达的细节,这对于所有形态的
工厂模式都是重要的
~ 一个系统有多于一个的产品族,而系统只消费其中一产品族.
~ 同属于一个产品族的产品是在一起使用的.这一约束必须在系统的设计中体现出来.
~ 系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现.
* 源码分析
控制台程序 Program.cs

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

/*该源码由邹江平2008-8-14编写,如有学习者请与QQ:200580231联系*/
* 补充说明
抽象工厂模式以一种倾斜的方式支持增加新的产品,为新产品族的增加提供方便
而不能为新的产品等级结构的增加提供这样的方便.