抽象工厂的理解

一.思路的理解 从抽象工厂类AbstractFactory入手
namespace Factory
{
    public abstract class AbstractFactory
    {
        public static AbstractFactory ChooseFactory(string factory)
        {
            return Assembly.Load("Factory").CreateInstance(factory) as AbstractFactory;
        }
        public abstract IAdminService CreateAdminService();
        public abstract IRoleService CreateRoleService();
    }
}

   1.客户需要知道是哪一套产品(既客户给一个参数Factory.SqlFactory就会加工一套产品)
 AbstractFactory  factory = AbstractFactory. ChooseFactory(Factory.SqlFactory)(知道要加工哪套产品)
 factory.CreateAdminService()和factory.CreateRoleService()是在简单工厂实例化一套具体产品(加工这一套产品)
      简单地说就是先创建一个简单工厂对象,再创建一个具体的实体对象。
   2.客户需要知道产品有什么功能(通过接口提供的方法)  

 

二.下面是概念的理解:
1.书上概念的理解
  1.抽象工厂设计模式概念:(P106)
    提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
       一系列:是指一套产品(一个产品族),一个简单工厂加工一个系列产品
       相互依赖:产品族中的产品必须是有关系的,比如:不能一个是汽车,一个是馒头
  2.创建型工厂:将对象的创建和使用进行了分离(P105)
     分离的理解:
         1.对象的创建:在简单工厂
         2.对象的使用:在用户需要实例化对象时,用户只需要:抽象工厂对象.抽象方法 就返回了抽象产品
2.抽象工厂模式的特点:
      1.将对象的创建和使用进行了分离(创建型模式都具备的)
      2.易于交互产品系列(一个工厂创建的是一套完整的产品系列)
      3.有利于产品的一致性(在一个应用中只出现一个具体的工厂)
3.抽象工厂主要应对“新系列”的需求变动,其缺点在于难以应对“新种类产品”的需求变动
   解释:1.产品族:同族的产品,比如茶杯和茶杯盖就是一个产品族(对应于一系列),汽车和引擎也同样是产品族
                   如果要加一个产品族(Oracle)的话,只需要加一个产品族实体产品和对应的工厂就可以了
         2.如果产品族层次(对应于新种类产品)经常变动,那就不适合抽象工厂了,
           比如:汽车、引擎再增加一个新种类产品:轮胎,会涉及到抽象工厂类及其所有子类的改动(不满足开闭原则)
4.抽象工厂适用场合:
      1.系统多于一个产品族
      2.同一个产品族的产品是一起使用的
      3.系统提供一个产品的库,所有的产品以同样的接口出现,从而是客户端依赖于接口,而不依赖于实现。


三.代码的实现:
   理解的时候是从抽象工厂类AbstractFactory入手的,写代码呢最好按以下步骤写:(主要是导入引用的时候清晰不混乱)
    Models -->IServices-->DAL-->Factory-->BLL-->WebUI
   思路和概念理解后,写代码就很easy了,需提醒的是在写DAL的时候,先写通用的SqlHelper.cs然后在写其他

代码下载:http://www.namipan.com/downfile/Temp_AbstractFactory.rar/4811561d4355af109312f31b1b71dc645face72c91770500

你可能感兴趣的:(抽象工厂)