目的:
工厂对象通常包含一个或多个方法,用来创建这个工厂所能创建的各种类型的对象。这些方法可能接收参数,用来指定对象创建的方式,最后返回创建的对象。
有时,特定类型对象的控制过程比简单地创建一个对象更复杂。在这种情况下,工厂对象就派上用场了。工厂对象可能会动态地创建产品对象的类,或者从对象池中返回一个对象,或者对所创建的对象进行复杂的配置,或者应用其他的操作。
元素:
Product(产品):接口,提供产品的共有方法。
Creator(生产者):接口,通常所说的Factory,具有创建对象的接口方法。
ConcreteProduct(实际产品):实现产品接口,提供具体的产品具有的方法以及属性。
ConcreteCreator(实际生产者):实现生产者接口,实现创建对象的接口方法,描述对象的具体创建过程。
类图:
示例代码:
factory.java
public interface Factory {
abstract Button createButton();
}
button.java
public interface Button {
abstract void clickEvent();
}
WinButtonFactory.java
public class WinButtonFactory implements Factory{
@Override
public Button createButton() {
// TODO Auto-generated method stub
Button winbtn = new WinButton("winbtn");
return winbtn;
}
}
WinButton.java
public class WinButton implements Button{
private String btn_name;
public WinButton(String name)
{
this.btn_name = name;
}
@Override
public void clickEvent() {
// TODO Auto-generated method stub
System.out.println(this.btn_name);
}
}
MacButtonFactory.java
public class MacButtonFactory implements Factory{
@Override
public Button createButton() {
// TODO Auto-generated method stub
Button macbtn = new MacButton("1");
return macbtn;
}
}
MacButton.java
public class MacButton implements Button{
private String btn_id;
public MacButton(String id)
{
this.btn_id = id;
}
@Override
public void clickEvent() {
// TODO Auto-generated method stub
System.out.println(this.btn_id);
}
}
TestFactory.java
public class TestFactory {
public static void main(String[] args)
{
Factory factory1 = new WinButtonFactory();
Button btn1 = factory1.createButton();
btn1.clickEvent();
Factory factory2 = new MacButtonFactory();
Button btn2 = factory2.createButton();
btn2.clickEvent();
}
}