工厂模式

    xiaoxiao2026-02-23  8

    工厂模式

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

    工厂模式分类

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

    简单工厂模式

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

    uml图

    代码实现 

    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;           }          }

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

    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

    最新回复(0)