工厂模式之工厂方法模式
2015-08-04 18:14 你吃不吃麦芽糖 阅读(206) 评论(0) 收藏 举报工厂方法模式是简单工厂模式的进一步抽象和推广。工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。
在该模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做。核心工厂类变成了一个抽象工厂角色,这种进一步的抽象允许系统在不修改具体工厂角色的情况下引进新的产品。
工厂方法模式的一个示意性系统中几个角色:
- 抽象工厂角色(Creator):这个角色是工厂方法模式的核心,它是与应用程序无关的。任何在模式中创建对象的工厂类必须实现这个接口。
- 具体工厂角色(Concrete Creator):这个角色是实现了抽象工厂接口的具体类。具体工厂角色含有与应用密切相关的逻辑,并且受到应用程序的调用以创建产品对象。
- 抽象产品角色(Product):工厂方法模式所创建对象的超类型
- 具体产品角色(Concrete Product):该角色实现了抽象产品角色所声明的接口,工厂方法模式所创建的每一个对象都是对应的产品角色的实例。
以下是该示意性系统的源代码:
/*
* 抽象工厂角色的源代码
* */
public interface Creator {
/*
* 工厂方法
* */
public Product factory();
}
/*
* 抽象产品角色的源代码
* */
public interface Product {}
/*
* 具体工厂方法1
* */
public class ConcreteCreator1 implements Creator{
/**
* 工厂方法
*/
public Product factory(){
return new ConcreteProduct1();
}
}
/*
* 具体产品1
* */
public class ConcreteProduct1 implements Product{
public ConcreteProduct1(){
System.out.println("get product1");
}
}
/*
* 具体工厂类2源代码
* */
public class ConcreteCreator2 implements Creator{
/*
* 工厂方法
* */
public Product factory() {
// TODO Auto-generated method stub
return new ConcreteProduct2();
}
}
/*
* 具体产品2
* */
public class ConcreteProduct2 implements Product {
public ConcreteProduct2(){
System.out.println("get product2");
}
}
/*
* 客户端代码
* */
public class client {
public static void main(String[] args) {
Creator creator1=new ConcreteCreator1();
Product product1=creator1.factory();
Creator creator2=new ConcreteCreator2();
Product product2=creator2.factory();
}
}
如果系统需要添加一个新的产品,需要向系统中加入一个具体的产品类以及它对应的工厂类。没有必要修改客户端,也没有必要修改抽象工厂角色或者其他已有的具体工厂角色。
浙公网安备 33010602011771号