zoukankan      html  css  js  c++  java
  • 一个典型的工厂模式

    namespace Bll
    {
       public class empBll
        {
            IDAL.empDal itu = DALFactory.emp_Factory.Createusers(); //=new IDAL.empDal()行吗?这样有什么好处?     
    
            public DataTable GetAll()
            {
                return itu.GetAll();
            }
    }
    
    namespace IDAL
    {
        public interface empDal
        {
          DataTable GetAll();
         }
    }
    
    
    namespace DALFactory
    {
        public class emp_Factory
        {
           static readonly string path=System.Configuration.ConfigurationManager.AppSettings["DAL"];  
            public static IDAL.empDal Createusers()
            {
                string classname = path + ".sql_emp";
                return (IDAL.empDal)Assembly.Load(path).CreateInstance(classname); //怎么转为接口类型?
            }
        }
    }
    
    
    namespace SQLServerDAL
    {
        class sql_emp:IDAL.empDal
        {
    
            DBunit.SQLAccess sql = new DBunit.SQLAccess();
            public System.Data.DataTable GetAll()
            {
                return sql.ExecuteDataSet("select * from tab_emps join tab_roles on tab_emps.roleID=tab_roles.roleID").Tables[0];
            }
    
    这是一个典型的工厂模式。
    

    目的是用来满足“对修改关闭,对扩展开发”的设计原则。
    1、 IDAL.empDal itu = DALFactory.emp_Factory.Createusers();//接口是不能实例化的,只能给接口附一个实例,如果有一个类继承了 empDal接口,可以用new 来实例并赋值,但这样就把实现与接口耦合在一起了,不便于日后扩展,如果这句用工厂来创建实例,只需要修改 System.Configuration.ConfigurationManager.AppSettings["DAL"];  对应的xml配置文档的值,就可以将sql替换成oracl,不用重新编译,就可达到扩展目的。

    2、return (IDAL.empDal)Assembly.Load(path).CreateInstance(classname); //怎么转为接口类型?
        这个就是一个多态,CreateInstance方法相当与new的作用。在这里实例化了一个类名为classname的类,这个类必须是继承IDAL.empDal接口的。

  • 相关阅读:
    【UOJ#77】A+B Problem
    【AGC048B】Bracket Score
    ubuntu 下python opengl编程(2)
    网站建设的营销途径
    python脚本初探---新手写的QQ邮箱发送脚本
    Cstyle的C语言笔记 ---UEFI当中的面向对象模式
    date得到当前日期
    简单几步让SecureCRT更舒服【图文并茂】
    苹果的airplayer推荐
    【Cocos2d-X开发学习笔记】第22期:事件处理机制之触屏事件
  • 原文地址:https://www.cnblogs.com/hxwzwiy/p/2428032.html
Copyright © 2011-2022 走看看