您的位置:首页 > 编程语言 > Java开发

JAVA设计模式学习之----创建模式:工厂模式(工厂方法)

2008-12-24 11:40 831 查看
工厂模式分为工厂方法和抽象工厂。。

工厂模式用于生成对象。。。

一般我们生成对象使用new 如Person p = new Person();来实现,但我们在创建这个对象的时候可能要做一些其它的事情。。

当然java中通过重载构造函数可以实现如Person p = new Person(String name);,但通过增加参数的方法还是不能满足我们的需求,如是如果我要新建对象的时候要进行数据库的相关操作,那么采用重载构造函数的方法肯定会使构造函数中的代码相当长,不仅仅是因为不好看,主要是因为它违背了面向对象的设计原则:高内聚低耦合性。

好了,以Person类为例:现在有两个类继承Person,分别为Zhangshan,Zhangsi,那么我们采用工厂模式来产生对象,根据面向接口编程的原则我们将Person抽象成一个接口,那么有的人会说Zhangshan,Zhangsi实现Person接口然后实例化的时候用

Person p1 = new Zhangshan();

Person p2 = new Zhangsi();

不就要以了吗?为什么要工厂模式呢。

我们没有想到,有一天我们会有更多的类继承Person类,那么是不是我们都要使用Person pn = new ....的形式来产生实例呢?

显然不是明智之举。。。现在我们看工厂模式的代码:

首先Person接口:

package com.foactory.eus.interfaces;

public

interface
Person {

public

static
final String className =
"Person"
;

String getName();

int
getAge();

}

接口的实现类:Zhangshan

package com.foactory.eus.implement;

import com.foactory.eus.interfaces.Person;

public

class
Zhangshan implements Person{

/* (non-Javadoc)

* @see com.foactory.eus.interfaces.Person#getName()

*/

public
String getName() {

System.
out
.println(
"this is zhangshan is name"
);

return

""
;

}

public

int
getAge() {

return
0;

}

}

接口的实现类:Zhangsi

package com.foactory.eus.implement;

import com.foactory.eus.interfaces.Person;

public

class
Zhangsi implements Person {

/* (non-Javadoc)

* @see com.foactory.eus.interfaces.Person#getAge()

*/

public

int
getAge() {

// TODO Auto-generated method stub

return
0;

}

/* (non-Javadoc)

* @see com.foactory.eus.interfaces.Person#getName()

*/

public
String getName() {

// TODO Auto-generated method stub

System.
out
.println(
"this is zhangsi is name"
);

return

null
;

}

}

再看看工厂类及方法:PersonFactory

package com.foactory.eus.factory;

import com.foactory.eus.implement.Zhangshan;

import com.foactory.eus.implement.Zhangsi;

import com.foactory.eus.interfaces.Person;

public

class
PersonFactory {

public

static
Person instance(
int
which){

if
(which == 1){

return

new
Zhangshan();

}
else
{

return

new
Zhangsi();

}

}

public

static

void
main(String[] args){

Person p1 = PersonFactory.instance(1);

p1.getName();

Person p2 = PersonFactory.instance(2);

p2.getName();

}

}

if
(which == 2){

return

new
Zhangwu();

}

上面的main方法用来测试的,打印输出:

this

is
zhangshan
is
name

this

is
zhangsi
is
name

你可以看到这时候如果我们有新的Person的实现类的话,我们只需在PersonFactory 类中加入一段代码就可以了。

如增加
Zhangwu的实例如下:

if
(which == 2){

return

new
Zhangwu();

}

好了,上面讲的就是打工厂模式中的工厂方法了。如果系统不是很复杂,用这个就可以了。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: