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

[size=medium][b]Factory Method定义[/b][/size]
工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际工作推迟到子类中
工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。下面是工厂方法模式的缩略类图:

[img]http://dl.iteye.com/upload/attachment/0072/5988/b1543db2-265a-3478-97ed-cbc9e455d600.png[/img]

在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做。这个核心工厂则变为抽象工厂角色,仅负责给出具工厂子类必须实现的接口,而不接触哪一产品创建的细节。
这种抽象的结果,使这种工厂方法模式可以用来允许系统不修改具体工厂角色的情况下引进新产品,这一特点无疑使得工厂模式具有超过简单工厂模式的优越性。
一般结构如下:

[img]http://dl.iteye.com/upload/attachment/0072/5992/511d4864-8909-3227-8a47-f69497281d2d.png[/img]

和抽象工厂模式不同的是,工厂方法中每个工厂对应的一个具体的产品类,比如A类门工厂,只会产生A类门,而在抽象工厂中,每个工厂生产的是一个产品系,比如工程A(上篇中的车间A),既生产车门,又生产车轮。个人认为抽象工厂模式是工厂方法模式的一个补充,每个工厂可以生产一系列的产品


package factoryMethod;

public interface Door {

}



package factoryMethod;

public class DoorA implements Door {
public DoorA() {
System.out.println("制造了一个DoorA"); // TODO Auto-generated constructor stub
}
}



package factoryMethod;

public class DoorB implements Door {

public DoorB() {
System.out.println("制造了一个DoorB");
// TODO Auto-generated constructor stub
}
}



package factoryMethod;

/*
* A类门工厂
*/
public class DoorAFactory implements DoorFactory {

public Door factory() {

return new DoorA();
}

}



package factoryMethod;

/*
* B类门工厂
*/
public class DoorBFactory implements DoorFactory {

public Door factory() {
// TODO Auto-generated method stub
return new DoorB();
}

}



package factoryMethod;

/*
* 工厂接口
*/
public interface DoorFactory {

public Door factory();
}




package factoryMethod;


public class Test {

public static void main(String[] args) {
DoorFactory a = new DoorAFactory();
DoorFactory b = new DoorBFactory();
a.factory();
b.factory();
}


}



[img]http://dl.iteye.com/upload/attachment/0072/5997/1f3195e1-22f0-392e-922f-67f93f343ae0.jpg[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值