抽象工厂模式的实现:
1.首先建立一个要生产产品的抽象工厂类,列出所要生产的抽象产品。(其产品都是设计时已经固定且都是互相依赖,不会改变的)
abstract class DPFactory
{
//工厂要生产的产品
abstract public DPDocument CreateDocument();
abstract public DPView CreateView();
abstract public DPWorkspace CreateWorkspace();
}
2.根据第一点对抽象产品建立相应的产品抽象类(对抽象产品进行建立抽象类,是固定不定的,
但其产品样式等属于动态,随时都会改变,在其具体实现的时候继成此抽象类来改变)
abstract class DPDocument
{
abstract public void Dump();
}
abstract class DPWorkspace
{
abstract public void Dump();
}
abstract class DPView
{
abstract public void Dump();
}
3.客户程序根据业务逻辑进行构造产品,其都是依赖1、2的抽象类,并不依赖具体的实现!(实现稳定)
abstract class DPApplication
{
protected DPDocument doc;
protected DPWorkspace workspace;
protected DPView view;
//客户端的构造器,构造以factory的形式进行实现产品,具体的什么形式,根据传递过来的参数
public void ConstructObjects(DPFactory factory)
{
//创建一系列产品,都是依赖抽象类,并不依赖具体实现
workspace = factory.CreateWorkspace();
doc = factory.CreateDocument();
view = factory.CreateView();
}
abstract public void Dump();
//实现产品里的方法
public void DumpState()
{
if (doc != null) doc.Dump();
if (workspace != null) workspace.Dump();
if (view != null) view.Dump();
}
}
4.建立完工厂框架后对对于上述的第一点,第二点进行一一实现:
首先,生产产品的抽象工厂类(也就是第一点)的抽象产品进行具体实现!
class MyFactory : DPFactory
{
override public DPWorkspace CreateWorkspace()
{
return new MyWorkspace();//实现具体的WorkSpase
}
override public DPDocument CreateDocument()
{
return new MyDocument();//实现具体的Document
}
override public DPView CreateView()
{
return new MyView();//实现具体的View
}
}
然后,产品具体的实现(对于第二点)
*****************************************************
(1)实现WorkSpase方法
class MyWorkspace : DPWorkspace
{
override public void Dump()
{
Console.WriteLine("MyWorkspace exists2");
}
}
*****************************************************
(2)实现Document的方法
class MyDocument : DPDocument
{
override public void Dump()
{
Console.WriteLine("MyDocument exists1");
}
}
*****************************************************
(3)实现View的方法
class MyView : DPView
{
override public void Dump()
{
Console.WriteLine("MyView exists3");
}
}
5.将抽象的客户程序(第三点),以重写,进行具体的实现:
class MyApplication : DPApplication
{
//要实现的具体工厂
MyFactory myFactory = new MyFactory();
override public void Dump()
{
Console.WriteLine("MyApplication exists");
}
public void CreateFamily()
{
MyFactory myFactory = new MyFactory();
ConstructObjects(myFactory);
}
}
6.开始应用:调用具体实现工厂(第五点)的客户程序
public class Client
{
public static int Main(string[] args)
{
//初始化客户程序
MyApplication myApplication = new MyApplication();
myApplication.CreateFamily();
myApplication.DumpState();//父类里的方法
return 0;
}
}
以上是本人理解abstractfactory模式的流程,路过的人如有看到不妥之处,麻烦指证,不圣感激!