• 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看电视

     

     

     

     

  • 相关阅读:
    (转载)VS2010/MFC编程入门之三十七(工具栏:工具栏的创建、停靠与使用)
    (转载)VS2010/MFC编程入门之三十五(菜单:菜单及CMenu类的使用)
    (转载)VS2010/MFC编程入门之三十三(常用控件:标签控件Tab Control 下)
    (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
    ubuntu下格式化u盘
    Android笔记之AppWidget
    Android笔记之ViewPager实现滑动页面
    Android笔记之获取布局中的多个子控件
    Android笔记之Actionbar制作选项卡(可滑动)
    Android笔记之Actionbar使用(二)
  • 原文地址:https://www.cnblogs.com/fengxuehuanlin/p/6544863.html
Copyright © 2020-2023  润新知