`
IT4CAT
  • 浏览: 25198 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式之工厂方法模式(Factory Method)

 
阅读更多

  今天来介绍工厂方法模式,工厂方法(Factory Method)模式的意义在于定义一个创建工厂类的一个抽象工厂类(接口),具体的工厂类都实现这个抽象的工厂类,这里定义成接口,也就是所有具体的工厂实现类都要实现这个抽象的工厂类,之后再定义一个实际需求当中需要被创建的的对象的父类,此处这个父类也定义成接口。

工厂方法模式的对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不在负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。

 

如果闲介绍的墨迹直接看红色部分

 

工厂方法模式角色与结构

类图如下:

Factory Method

抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。  具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BulbCreator与TubeCreator。  抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在上图中,这个角色是Light。

  具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。

 

实例代码如下:

抽象工厂

 

package com.pattern.FactoryMethod;

 

public interface Creator {

 

/**

* 工厂方法

*/

public Product factory();

}


抽象产品
package com.pattern.FactoryMethod;

public interface Product {

}

具体工厂1
package com.pattern.FactoryMethod;

public class ConcreteCreator1 implements Creator {

public Product factory() {
return new ConcreteProduct1();
}

}

具体工厂2
package com.pattern.FactoryMethod;

public class ConcreteCreator2 implements Creator {

public Product factory() {
return new ConcreteProduct2();
}

}

实际产品1
package com.pattern.FactoryMethod;

public class ConcreteProduct1 implements Product{
public ConcreteProduct1() {
// do something
}
}

实际产品2
package com.pattern.FactoryMethod;

public class ConcreteCreator2 implements Creator {

public Product factory() {
return new ConcreteProduct2();
}

}

客户端
package com.pattern.FactoryMethod;

public class Client {
private static Creator creator1,creator2;
private static Product prod1,prod2;

/**
* @param args
*/
public static void main(String[] args) {
creator1 = new ConcreteCreator1();
prod1 = creator1.factory();
creator2 = new ConcreteCreator2();
prod2 = creator2.factory();
}

}

白话文,再白话一遍工厂方法模式
接上文的简单工厂,以 张三、李四、王五 球类比赛为例
想在是踢足球踢的好的不只张三一个人了,有好多个张三踢的都好,并且组成了一个牛逼的队伍,有好多个类似张三的人,同理,足球、篮球也都一样,都出现了好多牛逼的人,这时候学校就不能单方面的指派他们中的某一个人代表学校去参加比赛,这时候就需要没中球有个专门的管理人员由每种球类的管理员来挑选他们这个牛逼的队伍中谁来应对这场意义深刻的比赛,不难看出,这时候管理员代表的意义就为具体的工厂类,负责造具体的球员,当然球员不是他造的是他来选的,这时候就会有3个管理员,即三个具体的工厂类,而球员呢有一个共性,就是都为学生,都为某牛逼学校的学生,所以这些学生就相当与了产品,这样当要出去比赛时候,学校就会委派特定的管理员进行挑选牛逼人参赛,代码跟上面的差不多,套用即可,当有需要篮球对决的时候,篮球管理员就出来挑选自己的爱将出阵。

工厂方法模式优缺点:
优点:
多态性:客户代码可以做到与特定应用无关,适用于任何实体类
子类可以重新新的实现,也可以继承父类的实现。加一层间接性,增加了灵活性。
良好的封装性,代码结构清晰。扩展性好,在增加产品类的情况下,只需要适当修改具体的工厂类或扩展一个工厂类,就可“拥抱变化”屏蔽产品类。产品类的实现如何变化,调用者不需要关心,只需要关心产品的接口,只要接口保持不变,系统的上层模块就不会发生变化。
耦合度低,高层模块只需要知道产品的抽象类,其他的实现都不需要关心。

缺点:需要Creator和相应的子类作为工厂方法的载体,如果应用模型确实需要creator和子类的存在,则很好,反之需要增加一个类的层次。
  • 大小: 98.4 KB
分享到:
评论

相关推荐

    C++的设计模式之工厂方法模式(Factory Method)

    C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method)

    设计模式之-工厂方法-FactoryMethod

    《设计模式之——工厂方法(Factory Method)》 在软件工程中,设计模式是一种解决常见问题的可重用解决方案,它被广泛应用于构建高质量、可维护的代码。工厂方法是面向对象设计模式的一种,属于创建型模式。这个...

    设计模式C++学习之工厂方法模式(Factory Method)

    设计模式C++学习之工厂方法模式(Factory Method)

    设计模式之“工厂方法模式[Factory Method Pattern]”

    今天我们要探讨的是设计模式中的一个经典成员——工厂方法模式(Factory Method Pattern)。工厂方法模式是创建型设计模式的一种,它提供了一种创建对象的最佳方式。 ### 一、什么是工厂方法模式? 工厂方法模式...

    工厂方法模式(FactoryMethod)

    工厂方法模式是面向对象设计模式中的行为型模式之一,它提供了一种创建对象的最佳方式。在工厂方法模式中,一个工厂类负责创建对象,而具体的创建过程被延迟到了子类中,使得子类可以在不修改原有代码的基础上决定...

    创建型模式之工厂方法模式(Factory Method Pattern)

    工厂方法模式是面向对象设计模式中的一个核心模式,属于创建型模式。它的主要目的是通过引入一个工厂接口,将具体的对象创建过程封装起来,使得客户端在使用时无须关心产品类的确切实现,只需要通过工厂来获取所需的...

    设计模式之工厂方法模式

    “设计模式之工厂方法模式”表明我们将讨论的是设计模式中的工厂方法,它是创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。通过工厂方法,我们可以避免在客户端代码中直接实例化具体产品,而是通过...

    Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)

    Java设计模式是面向对象编程...在阅读《Chapter1___Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)》的相关资料时,你可以更深入地学习这些模式的细节,包括适用场景、优缺点以及如何在实际项目中实现。

    [创建型模式] head first 设计模式之工厂模式(Factory)

    在实际应用中,工厂方法模式有以下优点: - **封装变化**:当需要添加新产品或更换产品实现时,只需要增加新的具体产品类和对应的具体工厂类,无须修改原有代码,符合开闭原则。 - **多态性**:通过工厂方法,客户端...

    设计模式 FACTORY METHOD(工厂方法)

    工厂方法(Factory Method)是面向对象设计模式中的一个基础且广泛应用的模式,它属于创建型模式,主要目的是为了解耦对象的创建过程。本文将深入探讨工厂方法的设计理念、实现方式及其在实际开发中的应用。 ### ...

    设计模式——工厂方法模式

    在这个压缩包中,`FactoryMethod`可能包含了Java实现工厂方法模式的源代码示例。 设计模式是一种在特定场景下解决软件设计问题的通用、可重用的解决方案,它代表了最佳实践,被广泛应用于各种编程语言中。工厂方法...

    设计模式之工厂方法、简单工厂、抽象工厂

    工厂方法模式定义了一个创建对象的接口,但让子类决定实例化哪一个类。这个接口叫做工厂方法,让子类决定实例化哪一个对象。工厂方法将一个类的实例化延迟到其子类。这种方式提供了一种封装对象创建的方式,使得...

    c++设计模式-工厂方法模式

    在压缩包中的`FactoryMethod`文件很可能包含了示例代码,这些代码演示了如何在实际的Qt项目中运用工厂方法模式,例如定义工厂类、产品类以及它们之间的关系,以及如何在主程序中调用这些工厂来创建和使用对象。...

    设计模式之Factory

    本篇文章将详细探讨"设计模式之Factory",它是一种非常基础且重要的创建型设计模式。 Factory模式的核心思想是提供一个接口或者抽象类,用于创建某一类对象,但允许其子类决定实例化哪一个类。这种模式使得创建过程...

    C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式) (Level 300)

    C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式) (Level 300)

    c++-深入浅出讲解一下 “工厂方法模式 (Factory Method)”

    工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪一个具体类。这样,客户端代码就不需要知道具体的类是什么,只需通过工厂接口获取对象。 工厂...

    c#面向对象设计模式之factory method

    张建中的"C#面向对象设计模式之abstract method视频教程"可能涵盖了如何在C#中实现工厂方法模式的具体步骤,包括如何定义抽象产品类、具体产品类、抽象工厂类和具体工厂类,以及如何在客户端代码中使用这些类。...

    设计模式之工厂方法

    工厂方法(Factory Method)是设计模式中的一员,属于创建型模式,它的核心思想是定义一个用于创建对象的接口,让子类决定实例化哪一个类。这个接口就是工厂方法,让子类决定实例化哪一个类,工厂方法让类的实例化...

Global site tag (gtag.js) - Google Analytics