设计模式-工厂模式

能够实现轻松方便地构造对象实例,而不必关心构造对象实例的细节和复杂过程呢

 

工厂模式分为两类:工厂方法模式(包括简单工厂模式)与抽象工厂模式

 

工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。   
一个抽象工厂类,可以派生出多个具体工厂类。   
每个具体工厂类只能创建一个具体产品类的实例。


抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。   
一个抽象工厂类,可以派生出多个具体工厂类。   
每个具体工厂类可以创建多个具体产品类的实例。  

 

简单工厂模式

// 产品类
public interface IProduct {
    void show();
}

//产品实现类
public class ProductA implements IProduct {
    @Override
    public void show() {
    }
}

//简单工厂类
public class SimpleFactory {

    public IProduct createProduct(ProductType type) {
        switch (type) {
        case A:
            return new ProductA();
        }
        return null;
    }
}

//类型枚举
public enum ProductType {
    A, B, C
}

缺点:

每增加一种实现,都要修改createProduct方法,增加新的分支

 

 

工厂方法模式

// 工厂方法抽象
public interface IFactory {
    IProduct createProduct();
}

// 具体工厂实现
public class FactoryA implements IFactory {
    @Override
    public IProduct createProduct() {
        return new ProductA();
    }
}

缺点:

如果实现很多,会产生很多工厂对象

 

 

抽象工厂模式

// 另一种产品
public interface IComponent {

}

public class ComponentA implements IComponent {

}


// 抽象工厂
public interface AbstractFactory {
    IComponent createComponent();  
    
    IProduct createProduct(); 
}

// 工厂实现
public class FactoryA implements AbstractFactory {
    public IComponent createComponent() {
        return new ComponentA();
    }

    public IProduct createProduct() {
        return new ProductA();
    }
}

抽象工厂与工厂方法的区别:

一个工厂可以生产多种产品,产品属于统一族群

 

 

应用场景

1. 不需要区考虑具体的初始化过程

2. 易于产品扩展,新增实现不影响已有代码 

posted on 2017-04-05 21:17  alex_cool  阅读(282)  评论(0编辑  收藏  举报