简单工厂并不是设计模式,可以说是一种编程习惯.工厂方法模式,抽象工厂模式都属于对象创建型模式.
1.简单工厂
public abstract class Product {
abstract void prepare();
abstract void pack();
}
public class ProductA extends Product{
public void prepare() {
}
public void pack() {
}
}
public class ProductB extends Product{
public void prepare() {
}
public void pack() {
}
}
public class SimpleProductFactory {
public Product createProduct(String type){
if("productA".equals(type)){
return new ProductA();
}else if("productB".equals(type)){
return new ProductB();
}
return null;
}
}
public class Client {
public static void main(String[] args) {
SimpleProductFactory factory = new SimpleProductFactory();
Product product = factory.createProduct("productA");
product.prepare();
product.pack();
}
}
2.工厂方法模式
通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目地.工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法让类把实例化推迟到子类.但每新增一个新产品时就需要增加两个类.
public abstract class Product {
abstract void prepare();
abstract void pack();
}
public abstract class Creator {
public Product orderProduct(){
Product product = factoryMethod();
product.prepare();
product.pack();
return product;
}
protected abstract Product factoryMethod();
}
public class ConcreteProduct extends Product{
void prepare() {
}
void pack() {
}
}
public class ConcreteCreator extends Creator{
protected Product factoryMethod() {
return new ConcreteProduct();
}
}
public class Test {
public static void main(String[] args) {
Creator creator = new ConcreteCreator();
Product product = creator.orderProduct();
}
}
3.抽象工厂模式
抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类.允许客户端使用抽象的接口来创建一组相关的产品,而不需要关系实际产出的具体产品是什么。这样一来,客户就可以从具体的产品中被解耦。它的优点是隔离了具体类的生成,使得客户端不需要知道什么被创建了,而缺点就在于新增新的行为会比较麻烦,因为当添加一个新的产品对象时,需要更加需要更改接口及其下所有子类。