设计模式学习笔记——工厂方法模式

1.特点:一般先用工厂方法解决对象创建问题。

2.概念:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。

3.类图:

4.程序实现:

/// <summary>
    /// 抽象工厂,声明了一个创建Product的方法
    /// </summary>
    public abstract class Creator
    {
        /// <summary>
        /// 该方法用来返回Product产品
        /// </summary>
        /// <returns></returns>
        public abstract Product CreateProduct();
    }

    /// <summary>
    /// 具体产工厂,产品类 A 的创建者,继承自抽象工厂Creator
    /// </summary>
    public class ProductACreator : Creator
    {
        public override Product CreateProduct()
        {
            return new ConcreteProductA();
        }
    }

    /// <summary>
    /// 具体产工厂,产品类 B 的创建者,继承自抽象工厂Creator
    /// </summary>
    public class ProductBCreator : Creator
    {
        public ProductBCreator() { }

        public override Product CreateProduct()
        {
            return new ConcreteProductB();
        }
    }

    /// <summary>
    /// 抽象产品,定义工厂方法中所创建的对象
    /// </summary>
    public abstract class Product
    {
        public Product()
        { }

        public abstract void Opration();
    }

    /// <summary>
    /// 具体产品A,继承自Product
    /// </summary>
    public class ConcreteProductA : Product
    {
        public ConcreteProductA() { }

        public override void Opration()
        {
            // This is product A
        }
    }

    /// <summary>
    /// 具体产品B,继承自Product
    /// </summary>
    public class ConcreteProductB : Product
    {
        public ConcreteProductB() { }

        public override void Opration()
        {
            // This is product B
        }
    }

  

时间: 2024-10-15 06:00:26

设计模式学习笔记——工厂方法模式的相关文章

设计模式学习笔记--工厂方法模式

学习过简单工厂模式,感觉很好用.在创建对象时,可以将复杂的初始化操作从客户端分离出来,简化客户端代码.大大的减少了代码修改的难度.而且可以通过参数不同,创建不同的对象. 但是简单工厂模式也有一些弊端,违背了开放--封闭原则.即如果我们增加了一个产品,对应的工厂也要进行修改,即switch---case中要新增加一些分支条件,不利于扩展.所以就有了下面的工厂方法模式: 工厂方法模式:定义了一个用于创建对象的接口,子类决定实例化哪一个类,工厂方法模式使一个类的实例化延迟到子类. // 设计模式Dem

设计模式学习(一)——工厂方法模式

这里抄一段维基百科的定义,工厂方法模式即:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类.工厂方法让类的实例化推迟到子类中进行. 下图展示了一个工厂方法模式的结构图: 在上图中,展示了一个工厂方法模式的使用过程,消费者(类的使用者)要购买一个运动产品,他需要到该产品的生产厂家那里购买,生产厂家实现“运动产品”的生产.在这个过程中,消费者只需要特定功能的产品,而不管功能是如何实现的.工厂只需要生产指定产品,而不管产品是如何设计的.而产品类只需要提供产品功能的设计. 这与iphone

【大话设计模式读书笔记——工厂方法模式】

工厂方法模式 工厂方法模式的实质是"定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类.工厂方法让类的实例化推迟到子类中进行. 工厂方法模式 VS 简单工厂模式 简单工厂的模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择动态的实例化相关的类.对于客户端来说,去除了与具体产品的依赖. 工厂方法模式,定义了一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使得一个类的实例化延迟到其子类.工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题

设计模式学习笔记--备忘录(Mamento)模式

写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式:每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案:当我们碰到模式所描述的问题,就可以直接用相应的解决方法去解决这个问题,这就是设计模式. 设计模式就是抽象出来的东西,它不是学出来的,是用出来的:或许你根本不知道任何模式,不考虑任何模式,却写着最优秀的代码,即使以"模式专家"的角度来看,都是最佳的设计,不得不说是"最佳的模式实践",这

设计模式学习笔记--迭代(Iterator)模式

写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式:每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案:当我们碰到模式所描述的问题,就可以直接用相应的解决方法去解决这个问题,这就是设计模式. 设计模式就是抽象出来的东西,它不是学出来的,是用出来的:或许你根本不知道任何模式,不考虑任何模式,却写着最优秀的代码,即使以"模式专家"的角度来看,都是最佳的设计,不得不说是"最佳的模式实践",这

设计模式学习笔记--状态(State)模式

写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式:每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案:当我们碰到模式所描述的问题,就可以直接用相应的解决方法去解决这个问题,这就是设计模式. 设计模式就是抽象出来的东西,它不是学出来的,是用出来的:或许你根本不知道任何模式,不考虑任何模式,却写着最优秀的代码,即使以"模式专家"的角度来看,都是最佳的设计,不得不说是"最佳的模式实践",这

设计模式学习笔记--访问者(Visitor)模式

写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方案,这就是软件模式:每一个模式描述了一个在我们程序设计中经常发生的问题,以及该问题的解决方案:当我们碰到模式所描述的问题,就可以直接用相应的解决方法去解决这个问题,这就是设计模式. 设计模式就是抽象出来的东西,它不是学出来的,是用出来的:或许你根本不知道任何模式,不考虑任何模式,却写着最优秀的代码,即使以"模式专家"的角度来看,都是最佳的设计,不得不说是"最佳的模式实践",这

大话设计模式C++版——工厂方法模式

工厂方法模式是以简单工厂模式为基础的,如果未了解简单工厂模式的同学可先浏览<大话设计模式C++版--简单工厂模式>.在简单工厂模式中,提到过简单工厂模式的缺陷,即违背了开发-封闭原则,其主要原因是由于switch的判断结构的使用,使修改或添加新的对象时需要改动简单工厂类的代码,不符合开放-封闭原则,那么工厂方法模式会在那方面有所改进呢?我们仍以简单工厂模式中加减法计算器为例. 1.保持简单工厂模式的 IOperation 接口和实现对象(COperation_Add 和 COperation_

设计模式C++实现——工厂方法模式

模式定义: 工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个. 工厂方法让类把实例化推迟到子类. 模式结构: Creator是一个类,它实现了全部操纵产品的方法,但不实现工厂方法. Creator的全部子类都必须实现工厂方法(factoryMethod()),以实际制造出产品. 全部的产品必须实现Product基类.这样一来使用这些产品的类就能够引用这个基类,而不是派生类. 举例: 披萨店希望可以开一些加盟店. 经营者希望确保加盟店运营的质量,所以希望这些店都使用能经过实践