工厂方法模式也是一种创建对象的设计模式,属于创建型设计模式。工厂方法模式定义了对象工厂接口,抽象出了获取对象实例方法,而将具体的创建对象工作放到了具体的类创建工厂进行。
工厂方法模式类图:
[img]http://dl.iteye.com/upload/attachment/364517/538be5db-fcb6-38f8-bb2b-480cf3b9bdab.jpg[/img]
具体实现代码示例:
工厂接口:
具体工厂1:
具体工厂2:
对象接口:
具体对象1:
具体对象2:
测试类:
说明:
与简单工厂模式相比,工厂方法模式将对象的创建与抽象工厂分离,当要新增类对象的创建时,只需要实现一个具体工厂和一个具体的类(新增类对象的类)即可,满足了开闭原则。缺点在于,多出了很多具体的创建对象工厂,存在一种类对象,则要有相应的对象工厂对应。
工厂方法模式类图:
[img]http://dl.iteye.com/upload/attachment/364517/538be5db-fcb6-38f8-bb2b-480cf3b9bdab.jpg[/img]
具体实现代码示例:
工厂接口:
package factoryPattern;
public interface Factory {
Fruit factorygetInstance();
}
具体工厂1:
package factoryPattern;
public class AppleFactory implements Factory{
public Fruit factorygetInstance(){
// TODO Auto-generated method stub
return new Apple();
}
}
具体工厂2:
package factoryPattern;
public class PearFactory implements Factory{
public Fruit factorygetInstance(){
// TODO Auto-generated method stub
return new Pear();
}
}
对象接口:
package factoryPattern;
public interface Fruit {
String getFruitName();
}
具体对象1:
package factoryPattern;
public class Apple implements Fruit{
@Override
public String getFruitName(){
// TODO Auto-generated method stub
return "This is apple";
}
}
具体对象2:
package factoryPattern;
public class Pear implements Fruit {
@Override
public String getFruitName() {
// TODO Auto-generated method stub
return "This is pear";
}
}
测试类:
package factoryPattern;
public class FactoryMethodTest {
public static void main(String[] args){
Factory fac = new AppleFactory();
System.out.println(fac.factorygetInstance().getFruitName());
fac = new PearFactory();
System.out.println(fac.factorygetInstance().getFruitName());
}
}
说明:
与简单工厂模式相比,工厂方法模式将对象的创建与抽象工厂分离,当要新增类对象的创建时,只需要实现一个具体工厂和一个具体的类(新增类对象的类)即可,满足了开闭原则。缺点在于,多出了很多具体的创建对象工厂,存在一种类对象,则要有相应的对象工厂对应。