二、Abstract Factory 抽象工厂模式(创建型)

二、Abstract Factory 抽象工厂模式(创建型)
1、意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。


2、场景:还是上次说的那个网络游戏,定下来是一个休闲的FPS游戏。和CS差不多,8到16个玩家在游戏里面分成2组对战射击。现在要实现初始化场景的工作。要呈现一个三维物体一般两个元素是少不了的,一是这个物体的骨架,也就是模型,二就是这个骨架上填充的纹理。
   我们知道,这样的一个游戏不可能只有一张地图,而且地图的数量肯定是会一直增加的。如果游戏在初始化场景的时候需要根据不同的地图分别加载模型和纹理对象,那么势必就会使得场景的扩充变得很不方便。由此,我们引入Abstract Factory,抽象工厂生产的都是实际类型的接口(或者抽象类型),如果加了新的场景可以确保不需要修改加载场景的那部分代码。

3、具体实例如下:

    abstract class Road

    {


    }


    class M_Road : Road

    {

          // 实现Road

    }


    abstract class RoadFactory

    {

          public abstract Road CreateRoading();

          public abstract Build CreateBuilding();

          ......


    }


    class Factory : RoadFactory

    {

          public override Road CreateRoading()

          {

                return new M_Road;

          }

    }


3、何时采用
  -- 从代码角度来说,你希望在统一的地方创建一系列相互关联的对象,并且基于抽象对象的时候。
  -- 从应用角度来说,如果你的产品是成组成套的,并且肯定会不断扩展新系列的,那么就适用抽象工厂。比如说,外面买的塑料模型,里面总是有图纸、模型元件板和外壳包装三部分。那么生产模型的厂就是抽象工厂,打印图纸、打印包装盒以及生产元件板的三个流水线就是具体工厂了。需要生产新的模型,只需要制作新的图纸输入到三个流水线的电脑中就可以了。

4、实现要点
  -- 抽象工厂本身不负责创建产品,产品最终还是由具体工厂来创建的。
  -- 在抽象工厂中需要体现出生产一系列产品。这一系列产品是相互关联,相互依赖一起使用的。
  -- 抽象工厂对应抽象产品,具体工厂对应具体产品,外部依赖抽象类型,这样对于新系列产品的创建,外部唯一依赖的就是具体工厂的创建过程(可以通过反射解决)。

5、注意事项
  -- 一般来说需要创建一系列对象的时候才考虑抽象工厂。
  -- 如果系统的变化点不在新系列的扩充上,那么就没有必要使用抽象工厂。比如,如果我们不会增加新地图的话,那么也就没有必要引入抽象工厂。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值