C# 디자인 패턴 --- 추상 팩터리 패턴

추상 팩토리 패턴(추상 팩토리)

추상팩토리 패턴(Abstract Factory Pattern)은 다른 공장을 만들기 위한 슈퍼팩토리입니다. 슈퍼팩토리는 다른 공장의 공장이라고도 합니다. 이러한 유형의 디자인 패턴은 객체를 생성하는 최적의 방법을 제공하는 생성 패턴입니다. 팩토리 메소드 패턴은 단순 팩토리 패턴의 단점을 극복하기 위해 고안된 것으로, 단순 팩토리 패턴의 팩토리 클래스는 제품 클래스를 높이기 위해 추가 코드가 필요한 반면, 팩토리 메소드 패턴은 특정 팩토리마다 하나의 인스턴스 생성만 완료하면 된다. 확장성이 좋습니다. 그러나 실생활에서 공장은 하나의 제품만 생산하고 공장은 다양화되어 공장은 일련의 제품을 생산하게 되는데 이러한 시스템을 설계하고자 한다면 팩토리 메소드 패턴은 적합하지 않으며 추상팩토리 패턴은 하지만 아주 잘 해결할 수 있습니다.

using System;
namespace ConsoleApplication
{
    //一般每个接口或类都写在单独的.cs文件中
    //本示例为了执行查看方便才写在一起
    public interface IDatabase
    {
        void Delete();
        void Insert();
    }
    public interface IORM
    {
        void Delete();
        void Insert();
    }
    //Sqlserver的增删
    public class Sqlserver : IDatabase
    {
        public void Delete()
        {
            Console.WriteLine("delete data from sqlserver");
        }
        public void Insert()
        {
            Console.WriteLine("insert data to sqlserver");
        }
    }
    //Mysql的增删
    public class Mysql : IDatabase
    {
        public void Delete()
        {
            Console.WriteLine("delete data from Mysql");
        }
        public void Insert()
        {
            Console.WriteLine("insert data to Mysql");
        }
    }
  //Sqlserver的增删
    public class SqlserverORM : IORM
    {
        public void Delete()
        {
            Console.WriteLine("delete data from sqlserver by ORM");
        }
        public void Insert()
        {
            Console.WriteLine("insert data to sqlserver by ORM");
        }
    }
    //Mysql的增删
    public class MysqlORM : IORM
    {
        public void Delete()
        {
            Console.WriteLine("delete data from Mysql by ORM");
        }
        public void Insert()
        {
            Console.WriteLine("insert data to Mysql by ORM");
        }
    }
    public interface ICreator
    {
        IDatabase CreateDatabase();
        IORM CreateORM();
    }
    public class MysqlFactory:ICreator
    {
        /// 
        /// 负责创建Mysql
        /// 
        /// 
        public IDatabase CreateDatabase()
        {
            return new Mysql();
        }
       /// 
        /// 负责创建MysqlORM
        /// 
        /// 
        public IORM CreateORM()
        {
            return new MysqlORM();
        }
    }
    public class SqlserverFactory:ICreator
    {
        /// 
        /// 负责创建Sqlserver
        /// 
        /// 
        public IDatabase CreateDatabase()
        {
            return new Sqlserver();
        }
        /// 
        /// 负责创建SqlserverORM
        /// 
        /// 
        public IORM CreateORM()
        {
            return new SqlserverORM();
        }
    }
    /*public static class IFactory
    {
        //根据需求创建
        public static Database CreateDatabase(string dbType)
        {
            Database db = null;
            switch (dbType)
            {
                case "Sqlserver":
                    db = new Sqlserver();
                    break;
                case "Mysql":
                    db = new Mysql();
                    break;
                default:
                    break;
            }
            return db;
        }
    }*/
    class Program
    {
        static void Main(string[] args)
        {
            IDatabase db1 = new SqlserverFactory().CreateDatabase();
            db1.Delete();
            db1.Insert();
            IDatabase db2 = new MysqlFactory().CreateDatabase();
            db2.Delete();
            db2.Insert();
            IORM db3 = new SqlserverFactory().CreateORM();
            db3.Delete();
            db3.Insert();
            IORM db4 = new MysqlFactory().CreateORM();
            db4.Delete();
            db4.Insert();
            //添加新数据库直接添加对应的类即可
            Console.ReadKey();
        }
    }
}

 

Supongo que te gusta

Origin blog.csdn.net/lwf3115841/article/details/132057189
Recomendado
Clasificación