定义
定义一个创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
角色
抽象工厂角色(Creator):抽象工厂角色是工厂方法模式的核心,与调用者直接交互用来提供产品。
具体工厂角色(Concrete Creator):这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。
抽象产品角色(Product):工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。定义产品的规范,所有的产品实现都必须遵循产品接口定义的规范。
具体产品角色(Concrete Product):这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。
适用场景
简单工厂模式、工厂方法模式、抽象工厂模式具有相似的特性,所以他们的适用场景也差不多
- 在任何需要生成复杂对象的地方都可以使用工厂方法模式
- 简单对象无需引入工厂模式,因为引用工厂类,会增加系统复杂度
- 调用者自己组装产品需要增加依赖关系时,可以使用工厂模式,
- 系统需要很好的扩展性时,可以考虑使用工厂模式
类图
package com.vapy.creator.FactoryMethods;
/**
*
* @author vapy
*
*/
public abstract class Product {
}
package com.vapy.creator.FactoryMethods;
/**
*
* @author vapy
*
*/
public class ConcreteProduct extends Product {
public void productMethod() {
System.out.println("产品");
}
}
package com.vapy.creator.FactoryMethods;
/**
*
* @author vapy
*
*/
public abstract class Factory {
public Product createProduct() {
return null;
}
}
package com.vapy.creator.FactoryMethods;
/**
*
* @author vapy
*
*/
public class ConcreteFactory extends Factory {
@Override
public Product createProduct() {
return new ConcreteProduct();
}
}
package com.vapy.creator.FactoryMethods;
/**
*
* @author vapy
*
*/
public class Client {
public static void main(String[] args) {
Factory factory = new ConcreteFactory();
ConcreteProduct product = (ConcreteProduct) factory.createProduct();
product.productMethod();
}
}
本文代码可在github查看:点击此处