`
newleague
  • 浏览: 1505474 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

Java设计模式之工厂方法模式(2)

阅读更多

一 、工厂方法(Factory Method)模式
     工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。

    工厂方法(Factory Method)模式,又称多态性工厂(Polymorphic Factory)模
式或虚拟构造子(Virtual Constructor)模式;


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


三、创建过程如下

     一个工厂创建一个产品,所有的具体工厂继承自一个抽象工厂接口。
    客户端先创建不同产品的工厂,再由工厂创建具体产品,产品的创建逻辑分散在每个具体工厂类中。
    客户端只依赖于抽象工厂与抽象产品,不依赖任何具体的工厂与具体产品
    增加新产品时,需要增加工厂类和产品类,符合OCP原则

 

四、一个简单的实例   

Java代码 复制代码
  1. // 产品 Plant接口   
  2. public interface IPlant { }   
  3. //具体产品PlantA,PlantB   
  4. public class PlantA implements IPlant {   
  5.   
  6.  public PlantA () {   
  7.   System.out.println("create PlantA !");   
  8.  }   
  9.   
  10.  public void doSomething() {   
  11.   System.out.println(" PlantA do something ...");   
  12.  }   
  13. }   
  14. public class PlantB implements IPlant {   
  15.  public PlantB () {   
  16.   System.out.println("create PlantB !");   
  17.  }   
  18.   
  19.  public void doSomething() {   
  20.   System.out.println(" PlantB do something ...");   
  21.  }   
  22. }   
  23. // 工厂方法接口   
  24. public interface IFactory {   
  25.  public IPlant createPlant();   
  26. }   
  27. //具体工厂方法   
  28. public class FactoryA implements IFactory {   
  29.  public IPlant createPlant() {   
  30.   return new PlantA();   
  31.  }   
  32. }   
  33. public class FactoryB implements IFactory {   
  34.  public IPlant createPlant() {   
  35.   return new PlantB();   
  36.  }   
  37. }      
  38.   
  39. //客户端   
  40.   
  41. IFactory plantFactory = new FactoryA();   
  42.   
  43. IPlant planta = plantFactory.createPlant();   
  44.   
  45.  planta.doSomething();   
  46.   
  47.     
  48.   
  49. //若增加新产品PlantC时,只需要增加FactoryC工厂类和PlantC产品类即可。  
// 产品 Plant接口
public interface IPlant { }
//具体产品PlantA,PlantB
public class PlantA implements IPlant {

 public PlantA () {
  System.out.println("create PlantA !");
 }

 public void doSomething() {
  System.out.println(" PlantA do something ...");
 }
}
public class PlantB implements IPlant {
 public PlantB () {
  System.out.println("create PlantB !");
 }

 public void doSomething() {
  System.out.println(" PlantB do something ...");
 }
}
// 工厂方法接口
public interface IFactory {
 public IPlant createPlant();
}
//具体工厂方法
public class FactoryA implements IFactory {
 public IPlant createPlant() {
  return new PlantA();
 }
}
public class FactoryB implements IFactory {
 public IPlant createPlant() {
  return new PlantB();
 }
} 	

//客户端

IFactory plantFactory = new FactoryA();

IPlant planta = plantFactory.createPlant();

 planta.doSomething();

 

//若增加新产品PlantC时,只需要增加FactoryC工厂类和PlantC产品类即可。
 

此外,还有一个数字的加减乘除例子


五、工厂方法模式与简单工厂模式

  工厂方法模式与简单工厂模式再结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。

  工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。

  当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了"开放-封闭"原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。

  工厂方法模式退化后可以演变成简单工厂模式

分享到:
评论

相关推荐

    java设计模式之工厂模式

    java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式...

    java设计模式之工厂方法模式

    工厂方法模式是面向对象设计中的一种经典设计模式,属于创建型模式。它的主要目的是将对象的创建过程封装起来,使得创建过程独立于使用过程。在Java中,工厂方法模式允许我们定义一个创建对象的接口,但让实现这个...

    Java设计模式之工厂方法的源码

    该资源是Java设计模式之工厂方法完整工程的源码,作为博主的工厂方法模式实战之某商场一次促销活动博文的源码,需要使用者结合改博文使用,该源码直接下载后就可以运行的Java工程。该工程是基于Idea+maven+...

    JAVA设计模式之工厂方法模式

    ### JAVA设计模式之工厂方法模式 #### 一、引言 设计模式是在软件工程领域内广泛应用的一种编程思想,它能够帮助开发者解决常见的软件设计问题,提高代码的可维护性和复用性。面向对象的设计模式更是现代软件开发...

    Java设计模式之工厂方法的工厂方法实现的源码

    这个Java源码示例是关于工厂方法模式的一个具体实现,特别是工厂方法的工厂方法,即二级工厂模式。 工厂方法模式的核心思想是定义一个创建对象的接口,但让子类决定实例化哪一个类。这样的好处在于隔离了类的实例化...

    Java 经典设计模式讲解以及项目实战

    Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...

    Java 工厂模式 抽象工厂 工厂方法模式

    - `factory2`、`factory3`、`factory1` 这些文件名可能是实现工厂模式的Java源代码,分别代表了不同级别的工厂类,如简单工厂、工厂方法和抽象工厂的实现。通过查看这些源代码,可以学习到如何在实际项目中应用这些...

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

    工厂方法模式是面向对象设计模式中的一种,它属于创建型模式,主要解决的是当系统需要创建的对象具有多种类型,而具体创建哪种类型的对象在运行时才能确定的问题。在这个压缩包中,`FactoryMethod`可能包含了Java...

    设计模式之java工厂模式

    "设计模式之java工厂模式"是关于如何优雅地创建对象的一种经典设计模式,它属于创建者模式类别。创建者模式主要关注对象的创建,而工厂模式则在其中扮演着重要角色,因为它提供了一种抽象的方式来创建对象,从而使...

    Java设计模式之工厂方法的ifelse实现的源码

    在给定的"Java设计模式之工厂方法的ifelse实现"源码中,我们可以看到作者通过if...else语句来实现工厂方法的具体逻辑。通常,这种实现方式是针对不同类型的对象,根据条件判断来决定调用哪个具体类的构造函数。这种...

    java 设计模式 mvc模式 单例模式 代理 工厂 简单工厂

    本篇文章将对标题与描述中提到的几个关键Java设计模式进行深入分析。 首先,让我们来看一下MVC模式,这是一种广为接受的架构模式,用于构建用户界面。在MVC模式中,Model层管理数据以及业务逻辑,View层负责将数据...

    Java设计模式-工厂方法

    在"Java设计模式-工厂方法"的Demo中,我们通常会看到以下关键组件: 1. **抽象产品(Abstract Product)**:这是要创建的对象的接口。它定义了产品的公共接口,这样任何创建的产品都可以被客户端以相同的方式使用,...

    Java 工厂设计模式例题

    例题简单的阐述了Java工厂模式的概念,有利于读者更好地了解Java工厂模式

    Java设计模式05工厂方法模式

    ### Java设计模式05工厂方法模式 #### 模式动机与定义 工厂方法模式是一种类创建型模式,其核心在于定义一个创建对象的接口,但让子类决定实例化哪一个类。这种模式允许一个类的实例化延迟到其子类中进行。与简单...

    工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式

    在给定的资源中,"设计模式交流之工厂模式-shannonxu-2014-10-24.pptx"可能是详细的PPT讲解,涵盖了这些模式的概念、结构、优缺点以及实际应用案例。而"Factory"可能是一个代码示例,展示了工厂模式的具体实现,包括...

    java设计模式-工厂模式

    Java设计模式中的工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,当客户端请求创建一个产品对象时,它不会直接创建,而是调用一个工厂对象来完成创建工作。这种模式的核心在于封装了对象...

Global site tag (gtag.js) - Google Analytics