






















一。组成部分
1.抽象工厂----担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的。
2.具体工厂----这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。
3.抽象产品----担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。
4.具体产品----抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。
5.用户----用户通过抽象工厂和抽象产品选择自己所需要的具体产品
二。UML类图

三。代码
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
5
namespace Pattern
6
{
7
public class AbstratcFactory
8
{
9
public static void Main(string[] args)
10
{
11
AbstractSql delete = new SqlServer();
12
ClientUser user1 = new ClientUser(delete);
13
user1.Show();
14
15
AbstractSql insert = new Oracle();
16
ClientUser user2 = new ClientUser(insert);
17
user2.Show();
18
}
19
}
20
21
//抽象工厂类
22
public abstract class AbstractSql
23
{
24
public abstract AbstractInsert Insert();
25
public abstract AbstractDelete Delete();
26
}
27
28
//具体工厂[SqlServer]
29
public class SqlServer:AbstractSql
30
{
31
public override AbstractInsert Insert()
32
{
33
return new SqlServerInsert();
34
}
35
36
public override AbstractDelete Delete()
37
{
38
return new SqlServerDelete();
39
}
40
}
41
42
//具体工厂[Oracle]
43
public class Oracle:AbstractSql
44
{
45
public override AbstractInsert Insert()
46
{
47
return new OracleInsert();
48
}
49
50
public override AbstractDelete Delete()
51
{
52
return new OracleDelete();
53
}
54
}
55
56
//抽象产品[Insert]
57
public abstract class AbstractInsert
58
{ }
59
60
//抽象产品[Delete]
61
public abstract class AbstractDelete
62
{
63
public abstract void Interact(AbstractInsert insert);
64
}
65
66
//具体产品1[SqlServerInsert]
67
public class SqlServerInsert : AbstractInsert
68
{ }
69
70
//具体产品1[OracleInsert]
71
public class OracleInsert : AbstractInsert
72
{ }
73
74
//具体产品2[SqlServerDelete]
75
public class SqlServerDelete : AbstractDelete
76
{
77
public override void Interact(AbstractInsert insert)
78
{
79
Console.WriteLine(this.GetType().Name + " interacts with: " + insert.GetType().Name);
80
}
81
}
82
//具体产品2[OracleDelete]
83
public class OracleDelete : AbstractDelete
84
{
85
public override void Interact(AbstractInsert insert)
86
{
87
Console.WriteLine(this.GetType().Name + " interacts with: " + insert.GetType().Name);
88
}
89
}
90
91
//用户
92
public class ClientUser
93
{
94
private AbstractInsert AbstractInsert;
95
private AbstractDelete AbstractDelete;
96
97
public ClientUser(AbstractSql sql)
98
{
99
AbstractInsert = sql.Insert();
100
AbstractDelete = sql.Delete();
101
}
102
103
public void Show()
104
{
105
AbstractDelete.Interact(AbstractInsert);
106
}
107
}
108
}
109
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。