前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >工厂模式

工厂模式

作者头像
xiangzhihong
发布2018-02-05 10:08:34
4260
发布2018-02-05 10:08:34
举报
文章被收录于专栏:向治洪向治洪

工厂模式

何为工厂模式:定义一个用于创建对象的接口,让子类去决定实例化那一个类,FactoryMethod可以使一个类的实例化延迟到其子类。

工厂模式分类

工厂模式按其形态分主要分为三类:简单工厂、工厂模式和抽象工厂模式。

简单工厂模式

简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。顾名思义工厂就是生产东西的,有原料(参数),模子(对象)就能生产出很多个具有相同功能的对象啦。

uml图

代码实现 

代码语言:javascript
复制
public class Program  
    {  
        static void Main(string[] args)  
        {  
            LeiFeng studentA = SimpleFactory.CreateLeiFeng("学雷锋的大学生");//用简单工厂创建并实例化学雷锋的大学生  
            studentA.BuyRice();  
            LeiFeng studentB = SimpleFactory.CreateLeiFeng("社区志愿者");//用简单工厂创建实例化社区志愿者  
            studentB.BuyRice();  
        }  
    }  
    //雷锋类,定义了一些功能  
    class LeiFeng    
    {  
        public void Sweep(){ } //擦桌子  
        public void Wash(){ }  //洗衣服  
        public void BuyRice(){ }  //买米  
    }  
  
  
    //简单工厂类  
    class SimpleFactory  
    {  
       public static LeiFeng CreateLeiFeng(string type)  
       {  
            LeiFeng result = null;  
            switch (type) //判断选择要创建对象的类型  
            {   
                case "学雷锋的大学生":  
                    result = new UnderGraduate();  
                    break;  
                case "社区志愿者":  
                   result = new UnderGraduate();  
                   break;  
            }  
            return result;  
        }  
  
    }

工厂模式:创建对象的接口,让子类去决定具体实例化的对象

代码语言:javascript
复制
public class Program  {  
        static void Main(String[] args)  
        {  
            IFactory factory = new UndergraduateFactory();   //由接口创建新的学雷锋大学生  
            LeiFeng student = factory.CreateLeifeng();   //实例化  
  
            student.BuyRice();  
            student.Sweep();  
            student.Wash();  
        }  
    }  
    //雷锋类,定义了一些功能  
    class LeiFeng    
    {  
        public void Sweep(){ } //擦桌子  
        public void Wash(){ }  //洗衣服  
        public void BuyRice(){ }  //买米  
    }  
  
  
    //学雷锋的大学生  
    class UnderGraduate : LeiFeng{ }  
    //社区志愿者  
    class Volunteer : LeiFeng{ }  
  
    //雷锋工厂  
    interface IFactory //定义一个接口,实现创建雷锋类的功能  
    {  
        LeiFeng CreateLeifeng();  
    }  
      
    class UndergraduateFactory : IFactory//学雷锋大学生工厂  
    {  
        public LeiFeng CreateLeiFeng()  
        {  
            return new UnderGraduate();  
        }  
    }  
    class VolunteerFactory : IFactory//社区志愿者工厂  
    {  
        public LeiFeng CreateLeiFeng()  
        {  
            return new Volunteer();  
        }  
    }

注:文中的:表示extends

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-08-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档