C# 抽象工厂

来源:互联网 发布:淘宝怎样找货源 编辑:程序博客网 时间:2024/06/05 15:02

C# 抽象工厂

工厂模式 虽然可以解决多种产品的需求变更,但是还是不能解决单个产品的需求变更,加入某种产品需求变更,可以升级了!那么工厂模式将不再符合当前的设计模式,所以有了抽象工厂,在工厂设计模式中,每个工厂返回的产品对象是固定的,抽象工厂提供一个创建产品的接口来负责创建相关或依赖的对象,而不具体明确指定具体类

产品类

产品多了一个属性 : 等级
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyProduct{    public enum ProductType    {        product1,        product2,    }    public abstract class Product    {        public ProductType productType;        //新增产品的等级        public int productLevel;        public abstract void printProductName();    }    public class Product1 : Product    {        public override void printProductName()        {            Console.WriteLine("this is Product1 level = {0} ",this.productLevel);        }        public Product1()        {                       this.productType = ProductType.product1;        }           }    public class Product2 : Product    {        public override void printProductName()        {            Console.WriteLine("this is Product2 level = {0} ", this.productLevel);        }       public Product2()        {                       this.productType = ProductType.product2;        }    }}


工厂类

每个工厂的创建产品方法不再直接返回某个产品的对象,而是提供了两个接口,用于创建某个产品的不同等级下的产品
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using MyProduct;namespace MyFactory{    //简单工厂实现  修改起来需要频繁添加  case语句 , 不易维护    //class Factory    //{    //    public static Product CreateProduct(ProductType type)    //    {    //        Product product = null;    //        switch (type)    //        {    //            case ProductType.product1:    //                {    //                    product = new Product1();                            //                }    //                break;    //            case ProductType.product2:    //                {    //                    product = new Product2();    //                }    //                break;    //            default:    //                break;    //        }    //        return product;    //    }    //}        //工厂设计模式  , 不利于同种产品在不同工厂的变化  比如产品可以升级    //public abstract class Factory    //{    //    public abstract Product CreateProduct();    //}    //public class Factory1 : Factory    //{    //    public override Product CreateProduct()    //    {    //        return new Product1();    //    }    //}    //public class Factory2 : Factory    //{    //    public override Product CreateProduct()    //    {    //        return new Product2();    //    }    //}    //抽象工厂    public abstract class Factory    {        public abstract Product createlevel1Procuct();        public abstract Product createlevel2Product();    }    public class Factory1 : Factory    {        public override Product createlevel1Procuct()        {            Product product1 = new Product1();            product1.productLevel = 1;            return product1;        }        public override Product createlevel2Product()        {            Product product2 = new Product1();            product2.productLevel = 2;            return product2;        }    }    public class Factory2 : Factory    {        public override Product createlevel1Procuct()        {            Product product1 = new Product2();            product1.productLevel = 1;            return product1;        }        public override Product createlevel2Product()        {            Product product2 = new Product2();            product2.productLevel = 2;            return product2;        }    }}


具体应用

  Factory factory1 = new Factory1();            //工厂可以根据不同的 方法创建不同等级的产品            Product product1 = factory1.createlevel1Procuct();            Product product1_2 = factory1.createlevel2Product();            product1.printProductName();            product1_2.printProductName();                   Factory factory2 = new Factory2();            Product product2 = factory2.createlevel1Procuct();            Product product2_2 = factory2.createlevel2Product();            product2.printProductName();            product2_2.printProductName();

运行结果


0 0
原创粉丝点击