C#设计模式--抽象工厂模式(创建型模式)

一.抽象工厂模式:

    在工厂模式中具体的产品和具体的工厂是一一对应的,一个工厂只能生产一种产品,结构单一,例如小米公司刚开始是只生产小米手机,但是伴随着公司的发展,他们需要生产不同型号的手机,也会生产路由器,小米电视等等,那么工厂方法模式已不能满足业务的需求了,此时我们就需要抽象工厂模式,即一个工厂可以生产多种产品。

    抽象产品:负责定义抽象工厂生成的产品的接口,在本例中有两个抽象产品类,分别是手机和电视的抽象类

      • 电视(抽象类)
        • watchTV
      • 手机(抽象类)
        • 打电话
public abstract class IMobilePhone
{
    public abstract void dial();
}
public abstract class ITelevision
{
    public abstract void watchTV();
}
抽象产品类
  • 具体产品:负责实现抽象类的产
public class MobilePhone : IMobilePhone
{
    private string name;
    public MobilePhone(string name)
    {
        this.name = name;
        Console.WriteLine("制作手机"+name);
    }
    public override void dial()
    {
        Console.WriteLine("使用" + name+"打电话");
    }
}
public class Television : ITelevision
{
    private string name;
    public Television(string name)
    {
        this.name = name;
        Console.WriteLine("制作电视"+name);
    }
    public override void watchTV()
    {
        Console.WriteLine("通过"+name+"看电视");
    }
}
具体产品类
  • 抽象工厂类抽象工厂角色是负责定义用于生成抽象产品的接口
public abstract class Factory
{
    public static Factory getFactory(string classname)
    {
            
        Factory factory = null;
        try
        {
            factory = (Factory)Assembly.Load("设计模式").CreateInstance("设计模式." + classname);
        }
        catch (Exception e)
        {
            Console.WriteLine("没有找到 " + classname + "类。");
        }
        return factory;
    }
    public abstract MobilePhone createMobilePhone(String type);
    public abstract Television createTelevision(String type);
}
抽象工厂类
  • 具体工厂类:实现抽象工厂的抽象方法生成产品
public class XiaoMiFactory:Factory
{
    public override MobilePhone createMobilePhone(string type)
    {
        return new MobilePhone(type);
    }
    public override Television createTelevision(string type)
    {
        return new Television(type);
    }
}
具体工厂类

下面实际测试一下:

 

static void Main(string[] args)
{
    Factory factory = Factory.getFactory("XiaoMiFactory");
    IMobilePhone mobilePhone1 = factory.createMobilePhone("小米2");
    IMobilePhone mobilePhone2 = factory.createMobilePhone("小米5");

    ITelevision television1 = factory.createTelevision("小米电视2");
    ITelevision television2 = factory.createTelevision("小米电视3");

    mobilePhone1.dial();
    mobilePhone2.dial();

    television1.watchTV();
    television2.watchTV();
    Console.ReadKey();
}

 

  输出信息:

    • 制作手机小米2
    • 制作手机小米5
    • 制作电视小米电视2
    • 制作电视小米电视3
    • 使用小米2打电话
    • 使用小米5打电话
    • 通过小米电视2看电视
    • 通过小米电视3看电视

 

 

 

 

 

 

 

posted on 2017-03-13 20:25  风雪幻林  阅读(333)  评论(0编辑  收藏  举报