您的位置:首页 > 其它

自己看着视频的理解:设计模式之abstractfactory模式(2)

2008-10-10 08:22 441 查看
抽象工厂模式的实现:

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模式的流程,路过的人如有看到不妥之处,麻烦指证,不圣感激!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: