一 、工厂方法(Factory Method)模式
工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象
工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
二、 工厂方法模式角色与结构
抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。
具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BulbCreator与TubeCreator。
抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在上图中,这个角色是Light。
具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。
三、一个简单的实例
<!-- <br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 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
四、工厂方法模式与简单工厂模式
工厂方法模式与简单工厂模式再结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。
工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。
当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了"开放-封闭"原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。
工厂方法模式退化后可以演变成简单工厂模式。
分享到:
相关推荐
### JAVA设计模式之工厂方法模式 #### 一、引言 设计模式是在软件工程领域内广泛应用的一种编程思想,它能够帮助开发者解决常见的软件设计问题,提高代码的可维护性和复用性。面向对象的设计模式更是现代软件开发...
java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式java设计模式之工厂模式...
该资源是Java设计模式之工厂方法完整工程的源码,作为博主的工厂方法模式实战之某商场一次促销活动博文的源码,需要使用者结合改博文使用,该源码直接下载后就可以运行的Java工程。该工程是基于Idea+maven+...
这个Java源码示例是关于工厂方法模式的一个具体实现,特别是工厂方法的工厂方法,即二级工厂模式。 工厂方法模式的核心思想是定义一个创建对象的接口,但让子类决定实例化哪一个类。这样的好处在于隔离了类的实例化...
在给定的"Java设计模式之工厂方法的ifelse实现"源码中,我们可以看到作者通过if...else语句来实现工厂方法的具体逻辑。通常,这种实现方式是针对不同类型的对象,根据条件判断来决定调用哪个具体类的构造函数。这种...
本文将深入探讨Java中的工厂模式,包括基本的工厂模式、抽象工厂模式以及工厂方法模式。 **工厂模式**:工厂模式的核心思想是提供一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类。这样,客户端无需...
Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...
工厂方法模式是面向对象设计模式中的一种,它属于创建型模式,主要解决的是当系统需要创建的对象具有多种类型,而具体创建哪种类型的对象在运行时才能确定的问题。在这个压缩包中,`FactoryMethod`可能包含了Java...
"设计模式之java工厂模式"是关于如何优雅地创建对象的一种经典设计模式,它属于创建者模式类别。创建者模式主要关注对象的创建,而工厂模式则在其中扮演着重要角色,因为它提供了一种抽象的方式来创建对象,从而使...
在"Java设计模式-工厂方法"的Demo中,我们通常会看到以下关键组件: 1. **抽象产品(Abstract Product)**:这是要创建的对象的接口。它定义了产品的公共接口,这样任何创建的产品都可以被客户端以相同的方式使用,...
### Java设计模式05工厂方法模式 #### 模式动机与定义 工厂方法模式是一种类创建型模式,其核心在于定义一个创建对象的接口,但让子类决定实例化哪一个类。这种模式允许一个类的实例化延迟到其子类中进行。与简单...
例题简单的阐述了Java工厂模式的概念,有利于读者更好地了解Java工厂模式
工厂方法模式和简单工厂模式在结构上的不同是很明显的。工厂方法模式的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。工厂方法模式可以允许很多具体工厂类从抽象工厂类中将创建行为继承下来,从而...
Java设计模式中的工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,当客户端请求创建一个产品对象时,它不会直接创建,而是调用一个工厂对象来完成创建工作。这种模式的核心在于封装了对象...
在给定的资源中,"设计模式交流之工厂模式-shannonxu-2014-10-24.pptx"可能是详细的PPT讲解,涵盖了这些模式的概念、结构、优缺点以及实际应用案例。而"Factory"可能是一个代码示例,展示了工厂模式的具体实现,包括...