Java设计模式之工厂方法模式(转) 实现是抽象工厂?

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

责任编辑:覃里作者:Java研究组织   2009-02-25   来源:IT168网站

文本Tag: 设计模式 Java

  【IT168 技术文章】

         一 、工厂方法(Factory Method)模式

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

  二、 工厂方法模式角色与结构

  抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。

  具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BulbCreator与TubeCreator。

  抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在上图中,这个角色是Light。

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

  

  三、一个简单的实例

1 // 产品 Plant接口
  2 
  3   public interface Plant { }
  4 
  5   //具体产品PlantA,PlantB
  6 
  7   public class PlantA implements Plant {
  8 
  9   public PlantA () {
10 
11   System.out.println("create PlantA !");
12 
13   }
14 
15   public void doSomething() {
16 
17   System.out.println(" PlantA do something ...");
18 
19   }
20 
21   }
22 
23   public class PlantB implements Plant {
24 
25   public PlantB () {
26 
27   System.out.println("create PlantB !");
28 
29   }
30 
31   public void doSomething() {
32 
33   System.out.println(" PlantB do something ...");
34 
35   }
36 
37   }
38 
39   // 产品 Fruit接口
40 
41   public interface Fruit { }
42 
43   //具体产品FruitA,FruitB
44 
45   public class FruitA implements Fruit {
46 
47   public FruitA() {
48 
49   System.out.println("create FruitA !");
50 
51   }
52 
53   public void doSomething() {
54 
55   System.out.println(" FruitA do something ...");
56 
57   }
58 
59   }
60 
61   public class FruitB implements Fruit {
62 
63   public FruitB() {
64 
65   System.out.println("create FruitB !");
66 
67   }
68 
69   public void doSomething() {
70 
71   System.out.println(" FruitB do something ...");
72 
73   }
74 
75   }
76 
77   // 抽象工厂方法
78 
79   public interface AbstractFactory {
80 
81   public Plant createPlant();
82 
83   public Fruit createFruit() ;
84 
85   }
86 
87   //具体工厂方法
88 
89   public class FactoryA implements AbstractFactory {
90 
91   public Plant createPlant() {
92 
93   return new PlantA();
94 
95   }
96 
97   public Fruit createFruit() {
98 
99   return new FruitA();
100 
101   }
102 
103   }
104 
105   public class FactoryB implements AbstractFactory {
106 
107   public Plant createPlant() {
108 
109   return new PlantB();
110 
111   }
112 
113   public Fruit createFruit() {
114 
115   return new FruitB();
116 
117   }
118 
119   }
120 
121

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

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

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

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

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

时间: 2024-12-24 05:05:01

Java设计模式之工厂方法模式(转) 实现是抽象工厂?的相关文章

java设计模式1--工厂方法模式(Factory Method)

本文地址:http://www.cnblogs.com/archimedes/p/java-factory-method-pattern.html,转载请注明源地址. 工厂方法模式(别名:虚拟构造) 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 概述 当系统准备为用户提供某个类的子类的实例,又不想让用户代码和该子类形成耦合时,就可以使用工厂方法模式来设计系统.工厂方法模式的关键是在一个接口或抽象类中定义一个抽象方法,该方法返回某

JAVA设计模式之模版方法模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.这就是模板方法模式的用意. 模板方法模式的结构 模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术. 模板方法模式需要开发抽象类和具体子类的设计师之间的协作

JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 "过程",不仅是一个操作,像一部大机器中的一个齿轮传动. 模式的问题:你如何能轻松方便地构造对象实例,而不必关心构造对象实

JAVA设计模式(01):创建型-工厂模式【工厂方法模式】(Factory Method)

简单工厂模式尽管简单,但存在一个非常严重的问题.当系统中须要引入新产品时,因为静态工厂方法通过所传入參数的不同来创建不同的产品,这必然要改动工厂类的源码,将违背"开闭原则".怎样实现添加新产品而不影响已有代码?工厂方法模式应运而生,本文将介绍另外一种工厂模式--工厂方法模式. 1 日志记录器的设计 Sunny软件公司欲开发一个系统执行日志记录器(Logger).该记录器能够通过多种途径保存系统的执行日志,如通过文件记录或数据库记录,用户能够通过改动配置文件灵活地更换日志记录方式. 在设

Java二十三设计模式之------工厂方法模式

一.工厂方法模式 工厂方法模式有三种 1.普通工厂模式:就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建.首先看下关系图: 举例如下:(我们举一个发送邮件和短信的例子) 首先,创建二者的共同接口: public interface Sender { public void Send(); } 其次,创建实现类: public class MailSender implements Sender { @Override public void Send() { System.out.pr

设计模式【工厂方法模式】

本文介绍设计模式中的[工厂模式].首先介绍工厂模式的作用,工厂模式主要是为创建对象提供过度接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 其中一些资料会将工厂模式,分为三类,这三类的分类为: 1. 简单工厂模式(Simple Factory) 2. 工厂方法模式(Factory Method) 3. 抽象工厂模式(Abstract Factory) 但是某些资料会将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类.所以分为:工厂方法模式(F

工厂方法模式(Java与Kotlin版)

前文推送 设计模式 简单工厂模式(Java与Kotlin版) Kotlin基础知识 Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操作 Kotlin入门第三课:数据类型 初次尝试用Kotlin实现Android项目 1. 定义 工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式.在工厂方法模式中,工厂父类负责

Javascript设计模式理论与实战:工厂方法模式

本文从简单工厂模式的缺点说起,引入工厂方法模式,介绍的工厂方法模式的基本知识,实现要点和应用场景,最后举例进行说明工厂方法模式的应用.在之前的<Javascript设计模式理论与实战:简单工厂模式>这篇文章中,我们介绍了简单工厂的知识和一些应用.简单工厂模式存在一个唯一的工厂类,它的优点是所有产品类的实例化集中管理,便于理解,但这既是优点也是缺点.如果产品类的数量较少并且不会经常发生变化,我们可以直接利用简单工厂模式,但是有的时候,需求是随时在变的,产品类也可能随时在增加,如果使用简单工厂模式

从王者荣耀看设计模式(十四.工厂方法模式)

从王者荣耀看设计模式(工厂方法模式) 二.简介 王者荣耀游戏设计师根据英雄技能.属性.天赋等因素,将英雄划分为射手.辅助.打野.法师.坦克.战士等职业.一局比赛存在多类英雄可供选择.玩家在挑选游戏英雄时,合理的英雄职业搭配是赢得游戏胜利的基本保证. 三.工厂方法模式 工厂方法模式(Factory Method Pattern):工厂方法模式又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式.在

(转)设计模式(五)简单工厂模式+工厂方法模式

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 “过程”,不仅是一个操作,像一部大机器中的一个齿轮传动. 模式的问题:你如何能轻松方便地构造对象实例,而不必关心构造对象实例的细节和