第三课 创建型模式 第三节 抽象工厂模式(Abstract Factory Pattern)

来源:互联网 发布:燕十八知乎 编辑:程序博客网 时间:2024/04/26 08:24

昨天、今天我学习了抽象工厂设计模式,呵呵。今天做一下学习笔记。主要学习资料来源:《大话设计模式》、云涛的博客

    依照惯例先记录一下抽象工厂模式的定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类,注意是一组,也就是说创建的至少是一个对象,我的理解为创建一个产品族对象提供一个接口。

    产品族:位于不同产品等级结构中,功能相关联的产品组成的集合。抽象工厂模式提供的一系列产品就是一个产品族。

    产品等级结构:相同结构的产品,通常表现为一个产品接口或产品的抽象类。

    抽象工厂模式和工厂方法模式的区别:工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。工厂方法模式中的工厂接口提供的方法是创建一个产品,而抽象工厂模式中的工厂接口中提供多个不同的方法,用于创建不同产品结构的相关联的对象。

    要点:抽象工厂模式的工厂接口中提供的创建产品的方法个数,取决于产品等级结构的个数,比如存在CPU和主板两个产品等级结构,则工厂接口中存在两个方法  createCPU和createMemory().

     示例图:(一下图片来源:http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html)

       

     UML图:

    

       代码:

      产品接口:

   

 /// <summary>
    /// 定义一个CPU产品接口
    /// </summary>
    public interface CPU
    {
        /// <summary>
        /// 打印出CPU针脚数
        /// </summary>
        void calculate();
    }

    public interface Mainboard {
        /// <summary>
        /// 打印CPU插槽的孔数
        /// </summary>
        void InstallCPU();
    }
    //产品等级结构就是:实现同一个产品接口的子类,成为一个产品等级结构,有几个产品接口就有几个产品等级结构。
    //产品族:由多个产品等级结构中相关联的产品组成的家族,比如CPU产品和Mainboard产品中,interal的cpu和interal的主板组成一个家族。

   产品实现:

 public class InteralCPU:CPU
    {

        public void calculate()
        {
            Console.WriteLine("Interal CPU的针脚数是755");
        }
    }

    public class AMDCPU : CPU {

        public void calculate()
        {
            Console.WriteLine("AMD CPU的针脚数是785");
        }
    }

    public class InteralMainboard:Mainboard {

        public void InstallCPU()
        {
            Console.WriteLine("Interal 主板的针孔数是755");
        }
    }

    public class AMDMainboard : Mainboard {

        public void InstallCPU()
        {
            Console.WriteLine("AMD 主板的针孔数是785");
        }
    }

 工厂接口:

 /// <summary>
    /// 提供创建两个不同产品的方法,提供创建不同产品等级结构中功能相关的产品的对象的方法。即创建一个产品族的接口。
    /// </summary>
    public interface IFactory
    {
        CPU CreateCPU();
        Mainboard CreateMainboard();
    }

工厂实现:

 /// <summary>
    /// 将不同产品等级结构中的相关联的对象封装到一起,形成一个产品族。
    /// </summary>
    public class InteralFactory : IFactory {
        public CPU CreateCPU()
        {
            return new InteralCPU();
        }
        public Mainboard CreateMainboard()
        {
            return new InteralMainboard();
        }
    }

    public class AMDFactory : IFactory
    {
        public CPU CreateCPU()
        {
            return new AMDCPU();
        }

        public Mainboard CreateMainboard()
        {
            return new AMDMainboard();
        }
    }

 客户端调用:

IFactory f1 = new InteralFactory();
            CPU cpu=  f1.CreateCPU();
            Mainboard main = f1.CreateMainboard();
            cpu.calculate();
            main.InstallCPU();
            Console.ReadLine();

原创粉丝点击