zoukankan      html  css  js  c++  java
  • 工厂方法模式

    工厂方法模式用来定义一个创建产品的接口(抽象类),具体的产品创建工作由子类来实现,它是一种类的创建模式。

    模式介绍

    工厂方法模式分为4个角色:

    1. 抽象工厂Creator,该角色定义了工厂类所必须具备的所有接口,在本模式中通常只有一个Creator角色类

    2. 具体工厂ConcreteCreator,实际的工厂类,实现Creator中定义的接口并实际生成产品,应用将直接调用该角色以生成产品

    3. 抽象产品角色Product,该角色定义了产品类所必须具备的接口

    4. 具体产品角色ConcreteProduct,该角色实现了Product中定义的接口,它是应用所需要的真正的产品

    上述角色中,一般具体工厂角色和具体产品角色一一对应,某个具体的产品由某个具体的工厂来创建。

    为什么要用工厂方法模式

    在可以应用简单工厂模式的场合,都可以使用工厂方法,简单工厂实际上可以说是工厂方法的简单版本。

    具体的应用场合上来看,举个例子吧。

    假设有个工厂F1生产一种产品P1,那么客户在使用产品时使用的方法是:

    F1 f1 = new F1();
    P1 p1 = f1.create();
    ..
    Something.do(p1);
    ..
    Other.do(p1);

    如果客户又要用工厂F2生产的一种产品P2,那么客户就要大量的修改代码,包括Something和Other的方法签名都要修改成P2,这是一种巨大的负担。因此为了减轻这种负担,我们应该尽量少的修改代码实现,那么我们就抽象出P1和P2的抽象类P,抽象出F1和F2的抽象类F,那么上面的代码就变成了

    F f = new F1();
    P p = f.create();
    ..
    Something.do(p);
    ..
    Other.do(p);

    客户需要用F2生产P2时,只需要修改最开始初始化的2句代码,把F1变成F2即可,最大化的减少了代码负担。

    那么为什么要用工厂类来生产产品呢? 直接new产品类不行吗?

    一般情况下,使用工厂类的原因一般是产品类有可能比较复杂,使用工厂类可以更好的组织产品,也使得产品类更加纯净,只做数据的保存即可。

  • 相关阅读:
    BZOJ3615 : MSS
    BZOJ3468 : 滑雪
    BZOJ3515 : EvenPaths
    BZOJ3161 : 孤舟蓑笠翁
    BZOJ2652 : 三角板
    BZOJ2646 : neerc2011 flight
    BZOJ3567 : AABB
    HDU5823 : color II
    BZOJ1946 : [Ceoi2006]ANTENNA
    BZOJ4644 : 经典傻逼题
  • 原文地址:https://www.cnblogs.com/doomsword/p/2549964.html
Copyright © 2011-2022 走看看