工厂模式

希望对你有所帮助(C#)

首先是一个大体结构如下,

抽象工厂:
父类层:
      接口
      {//功能
  void Create();//创建
         void Delete();//删除
      }

      抽象类
      {
          1.静态的  自身类型的 属性  返回:实现类的对象  

          2.抽象的  接口类型的 属性
      }

子类层:
      接口的实现类
      {
         //实现了具体功能 create()
      }

      抽象类的实现类
      {
         //重写接口类型的属性  get{ return new 接口实现类();}
           实际返回 本层接口的实现类对象
      }

调用:
      抽象类.自身类型的属性.接口类型属性.Create();


下面是一个项目结构的搭建(多层架构):
1.新建类库Sys
  文件夹DAL
  {
       接口:IUserDao
       抽象类:DaoFactory
  }

2.新建类库DAL
  文件夹DAO
  {
      接口实现类:UserDao 
      抽象类实现类:DaoRealize
  }

3.在Sys层新建文件夹BLL
  {
 接口:IUserBll
 抽象类:BllFactory
   }

4.新建类库BLL
 {
 接口实现类:UserBll
 抽象类实现类:BllRealize
 }

5.新建WebUI
 
6.将DAL、BLL程序集的生成路径改为/WebUI/bin
 class Program
    {
        static void Main1(string[] args)
        {
            //普通实现接口
            MyClass myInter = new MyClass();
           // myInter.Fun();

            // 接口类型的引用 指向  实现类的对象
            //显示实现接口
            //MyInterface myInter2;//引用类型 存储的是引用 声明在栈
            //myInter2= new MyClass();//存储在堆中
            //myInter2.Fun();

            MyInterface m1 = new MyClass();
            m1.Fun();

            MyInterface2 m2 = new MyClass();
            m2.Fun();

        }

        //抽象工厂
        static void Main()
        {
            AbstractFactory.Instanct.GetInterFather.Create();
        }
    }
    #region 接口、抽象类
    abstract class MyAbstract
    {
        string name;
        string Name;
        void Fun()
        {
 
        }
    }

    interface MyInterface
    {//功能
        void Fun();
    }
    interface MyInterface2
    {
        void Fun();
    }

    class MyClass:MyInterface,MyInterface2
    {
        //实现接口
     
        ////显示实现接口
        //void MyInterface.Fun()
        //{
        //    Console.WriteLine("22");
        //}
        void MyInterface.Fun()
        {
            
        }
        void MyInterface2.Fun()
        {
           
        }
    }
#endregion
}
父类层
  //接口
    public interface InterFather
    {//功能
        void Create();
        void Delete();
    }
    
    //抽象类
    public abstract class AbstractFactory
    {
        //1.静态的  自身类型的 属性  返回实现类的对象
        private static AbstractFactory _instanct;
        public static AbstractFactory Instanct
        {
            get
            {//只读属性  返回私有字段
                return _instanct;
            }
        }
        //静态构造函数  初始化静态成员
        static AbstractFactory()
        {
            //实例化实现类对象
            _instanct = new ChildFactory2();
        }

        //2.抽象的 接口类型的 属性
        public abstract InterFather GetInterFather { get; }
    }
}


子类层1
  //接口的实现类
    public class ChildInter1 : InterFather
    { //具体的实现方法
        void InterFather.Create()
        {
            Console.WriteLine("子类层1的create方法执行");
        }

        void InterFather.Delete()
        {
            Console.WriteLine("子类层1的delete方法执行");
        }
    }
    
     //抽象类的实现类
    public class ChildFactory1 : AbstractFactory
    {
        public override InterFather GetInterFather
        {
            get
            { //返回本层 接口的实现类
                ChildInter1 child = new ChildInter1();
                return child;
            }
        }
    }

}


子类层2
  //接口的实现类
    public class ChildInter2 : InterFather
    { //具体的实现方法
        void InterFather.Create()
        {
            Console.WriteLine("子类层2的create方法执行");
        }

        void InterFather.Delete()
        {
            Console.WriteLine("子类层2的delete方法执行");
        }
    }
    
     //抽象类的实现类
    public class ChildFactory2 : AbstractFactory
    {
        public override InterFather GetInterFather
        {
            get
            { //返回本层 接口的实现类
                ChildInter2 child = new ChildInter2();
                return child;
            }
        }
    }

}

原文地址:https://www.cnblogs.com/xhyang/p/3738839.html