当前位置:编程学习 > asp >>

步步为营 .NET 设计模式学习笔记 二十四、Factory Method(工厂方法模式)

概述

在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?这就是要说的Factory Method模式了。

意图

定义一个用户创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

结构图

角色说明:

抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。

具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BulbCreator与TubeCreator。

抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在上图中,这个角色是Light。

具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。

生活中的例子

工厂方法定义一个用于创建对象的接口,但是让子类决定实例化哪个类。压注成型演示了这种模式。塑料玩具制造商加工塑料粉,将塑料注入到希望形状的模具中。玩具的类别(车,人物等等)是由模具决定的。

 

示例用例图

如果去麦当劳吃汉堡,汉堡的制作过程就是一个工厂方法模式,用例图如下:

image

 

代码设计

先创建Hamburger.cs:

html#viewSource" commandName="viewSource" highlighterId="highlighter_679260">view sourceprint?
1 public abstract class Hamburger
2 {
3     public abstract string BuyHamburger();
4 }

 

再创建CheeseBurger.cs:

view sourceprint?
1 public class CheeseBurger : Hamburger
2 {
3     public override string BuyHamburger()
4     {
5         return "你要的是起司汉堡 ";
6     }
7 }

 

再创建RoastedChickenBurger.cs:

view sourceprint
补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,