您现在的位置是:主页>文章>C# 设计模式(1)-- 简单工厂模式 网站首页

C# 设计模式(1)-- 简单工厂模式

一,引言

这个系列是本人对设计模式的一些看法,希望能让对设计模式有兴趣的朋友,以此入门,写的不当之处欢迎指出。转载的朋友请留下原文链接。下面为大家介绍一种设计模式-- 简单工厂模式.

二,简单工厂模式介绍  

就是由一个工厂类根据传入的参数决定创建出哪一种产品类的实例。即把类的创建的职责交给工厂类来完成,简化前端实例化类的复杂度,和实例化方式,实现统一创建同一类型的类的实例方法。

Simple Factory模式实际上不是GoF 23个设计模式中的一员。但是这里还是先以此入门。

三,具体例子

namespace SimpleFactoryDemo
{
    /// 
    /// 模型抽象类
    /// 
    public abstract class Model
    {
        /// 
        /// 材料
        /// 
        protected string Material;
        /// 
        /// 创建具体模型
        /// 
        public abstract void Create();
    }
}
namespace SimpleFactoryDemo
{
    /// 
    /// 汽车模型类
    /// 
    public class CarModel:Model
    {
        public CarModel(string Material) { this.Material = Material; }
        public override void Create()
        {
            Console.WriteLine("使用" + Material + "--制作了汽车模型");
        }
    }
}
namespace SimpleFactoryDemo
{
    /// 
    /// 摩托模型类
    /// 
    public class MotoModel:Model
    {
        public MotoModel(string Material) { this.Material = Material; }
        public override void Create()
        {
            Console.WriteLine("使用" + Material + "--制作了摩托模型");
        }
    }
}
namespace SimpleFactoryDemo
{
    /// 
    /// 飞机模型类
    /// 
    public class AircraftModel:Model
    {
        public AircraftModel(string Material) { this.Material = Material; }
        public override void Create()
        {
            Console.WriteLine("使用" + Material + "--制作了飞机模型");
        }
    }
}
namespace SimpleFactoryDemo
{
    /// 
    /// 模型工厂类
    /// 
    public class ModelSimpleFactory
    {
        public Model model;
        /// 
        /// 根据不同材料创建不同类型的模型
        /// 
        /// 
        /// 
        public  Model create(string Material) 
        {
           switch(Material){
               case "粘土" :
                   model=new CarModel(Material);break;
               case "钢塑土":
                   model = new MotoModel(Material); break;
               case "油泥":
                   model = new AircraftModel(Material); break;
           } 
            return model;
        }
    }
}
namespace SimpleFactoryDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            ModelSimpleFactory Factory = new ModelSimpleFactory();//创建模型工厂类
            Model model= Factory.create("油泥");
            model.Create();
            model = Factory.create("钢塑土");
            model.Create();
            model = Factory.create("粘土");
            model.Create();
        }
    }
}

四,例子分析

工厂就是生产的一个东西,你有什么需求,工厂就根据你的需求提供不同的成品给你。大家可以看到上例有一个模型抽象类,一:飞机模型类,汽车模型类和摩托模型类继承于模型抽象类。2:创建模型工厂类,把生产具体模型的业务逻辑交给工厂类去处理,这样前台不管要实例化那个类都可以有同一的实例化接口。3:前端(需要用到这些类的地方)通过传递具体产生,上例是根据材料属性区分的,当然也可以用其它方式,调用工厂类的创建方法返回具体实例。

五,总结

没有最好的设计方式,只有最合适的设计方式,能简单实现就不要为了不知名的后期扩展而大幅度添加业务逻辑!(小小建议,不喜勿喷)。

优点: 1,业务的分离降低了耦合度。2,实例化不同类时简化实例化方式。

缺点: 把前端的某些逻辑交有工厂类去实现,在一定程度上使得工厂逻辑变得越来越复杂,当工厂类发生问题时系统牵连过大。

暂时想到这些,喜欢请转载,有任何问题欢迎留言...

本例实例下载:简单工厂模式源码

Top