本文介绍各种工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式。文章部分内容来自网址
简单工厂模式
需求
将实例化类的代码抽象出来,使用一个类专门负责实例化各种类,使用者不显示使用new关键字创建类。
UML
代码
public interface Product {
}
public class ProductImpl1 implements Product {
}
public class ProductImpl2 implements Product {
}
public class SimpleFactory {
public Product createProduct(int type){
if(type==1){
return new ProductImpl1();
}else if(type==2){
return new ProductImpl2();
}
return null;
}
}
public class Client {
private static SimpleFactory simpleFactory = new SimpleFactory();
public static void main(String[] args) {
Product p1 = simpleFactory.createProduct(1);
Product p2 = simpleFactory.createProduct(2);
}
}
java实例:
工厂方法
需求,需要使用一个产品,但是不知道或者不确定如何创建这个产品。
UML
public interface Product {
}
public class ConcreteProduct implements Product {
}
public abstract class Factory {
abstract Product createProduct();
void doSometing(){
Product p = createProduct();
}
}
public class FactoryImpl extends Factory {
@Override
Product createProduct() {
return new ConcreteProduct();
}
}
工厂方法的核心是一个抽象类和抽象方法。
java实例
javax.xml.transform.TransformerFactory
抽象工厂模式
需求
提供一个接口,用来创建相关的一类对象。
类图
代码
public abstract class AbstractFactory {
abstract AbstractProductA createProductA();
abstract AbstractProductB createProductB();
}
public class AbstractProductA {
}
public class AbstractProductB {
}
public class ProductA1 extends AbstractProductA {
}
public class ProductA2 extends AbstractProductA {
}
public class ProductB1 extends AbstractProductB {
}
public class ProductB2 extends AbstractProductB {
}
public class ConcreteFactory1 extends AbstractFactory {
@Override
AbstractProductA createProductA() {
return new ProductA1();
}
@Override
AbstractProductB createProductB() {
return new ProductB1();
}
}
public class ConcreteFactory2 extends AbstractFactory {
@Override
AbstractProductA createProductA() {
return new ProductA2();
}
@Override
AbstractProductB createProductB() {
return new ProductB2();
}
}