抽象工厂设计模式

来源:互联网 发布:mysql创建数据库语句 编辑:程序博客网 时间:2024/03/29 07:59

                         抽象工厂设计模式 解析

创建三层框架
          表示层 an 类,业务逻辑层 anBAL 类 ,数据访问层 anDAL 类
定义抽象产品类 和抽象工厂类
     anIDAL (类型 接口) Factory(类型 抽象类)
    
 1.定音抽象产品 anIDAL 中的 接口 animal
namespace anIDAL
{   ///////////抽象产品 接口
   public interface anI
    {
       string animal();
    } 
 }      
 2. 分别实现 实体产品 anDAL (引用anIDAL)
           Brid/anClass.cs 继承抽象产品 anI 实现接口 animal
using anIDAL;

namespace anDAL.Brid
{   /////////////////实体产品
    public class anClass:anI
    {
        #region anI 成员
        public string animal()
        {
            string name = "唧唧喳喳";
            return name;
        }
        #endregion
    }
}
           Cat/anClass.cs  继承抽象产品 anI 实现接口 animal
using anIDAL;

namespace anDAL.Cat
{          /////实体产品
    public class anClass:anI
    {
        #region anI 成员
        public string animal()
        {
            string name = "喵喵……喵喵";
            return name;
        }
        #endregion
    }
}      
           Dog/anClass.cs  继承抽象产品 anI 实现接口 animal
using anIDAL;

namespace anDAL.Dog
{    //////////实体产品
    public class anClass:anI
    {
        #region anI 成员
        public string animal()
        {
            string name = "汪汪……汪汪";
            return name;
        }
        #endregion
    }
}
 3. 实现抽象工厂 Factory  (引用 anDAL(数据访问层) anIDAL(抽象产品类))
        anFactory.cs 类
using anIDAL;
using System.Configuration;

namespace Factory
{
    public abstract class anFactory
    {
        /// <summary>
        /// /简单工厂设计 实现实体工厂
        /// </summary>
        /// <returns></returns>
        public static anFactory create()
        {
           //////读取配置文件 获取类型
            string name = ConfigurationManager.ConnectionStrings["animal"].ConnectionString;
            anFactory af = null;
          switch(name)
          {
              case "小狗":
                  af = new DogClass(); //实现 实体工厂DogClass 类
                  break;
              case "小鸟":
                  af = new BridClass(); //实现 实体工厂 BridClass 类
                  break;
              case "小猫":
                  af = new CatClass();  //实现 实体工厂 CatClass 类
                  break;
          }
          return af;
        }
        public abstract anI createFactory(); ///定义抽象工厂 createFactory
    }
}   
           BridClass.cs   //实体工厂 小鸟工厂  实现抽象类createFactory
using anDAL.Brid;

namespace Factory
{
    public class BridClass:anFactory
    {
        public override anIDAL.anI createFactory()
        {
            return new anClass(); //返回实体产品类
        }
    }
}
          CatClass.cs   //实体工厂 小猫工厂  实现抽象类createFactory
using anDAL.Cat;

namespace Factory
{
     public class CatClass:anFactory
    {

        public override anIDAL.anI createFactory()
        {
            return new anClass();  //返回实体产品类
        }
    }
}
        DogClass.cs   //实体工厂 小狗工厂  实现抽象类createFactory
using anDAL.Dog;

namespace Factory
{
    public class DogClass:anFactory
    {
        public override anIDAL.anI createFactory()
        {
            return new anClass();  //返回实体产品类
        }
    }
}
4. 在业务逻辑层得使用  anBAL(引用 anIDAL(抽象产品类) Factory(抽象工厂类))
       类 Class1.cs
using Factory;
using anIDAL;

namespace anBAL
{
    public class Class1
    {
        private static anFactory afd = anFactory.create(); //调用实现抽象工厂 Factory  anFactory.cs 类 中的简单工厂设计 实现抽象工厂对象
        private static anI aI = null;  //定义抽象产品类 的抽象产品对象
        public Class1()
        {
            aI = afd.createFactory();  //使用抽象工厂实现抽象产品对象
        }
        public string animal()
        {
            return aI.animal(); //使用抽象产品对象调用实体产品
        }
    }
}
在数据表示层 显示信息
配置文件信息 将项目打包安装后如果要想实现小猫,小狗或小鸟的方式只需改变配置文件中的
connectionString的值即可用户面对的只是抽象产品
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="animal" connectionString="小狗"/>
  </connectionStrings>
</configuration>
只需修改 connectionString 中的小狗/小鸟/小猫
 

       

原创粉丝点击