介绍
工厂方法模式是创建型设计模式之一
定义
一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。工厂就是用来生成对象的,把对象的实例化和初始化封装起来。
使用场景
在任何需要生成复杂对象的地方,都可以使用工厂方法模式
UML类图
- Product
抽象产品类
- ConcreteProduct
具体产品类,实现Product接口。
- Factory
抽象工厂类,该方法返回一个Product类型的对象。
- ConcreteFactory
具体工厂类,返回ConcreteProduct实例。
// 抽象产品类
public abstract class Product{
public abstract void method();
}
// 具体产品类A
public class ConcreteProductA extends Product{
@override
public void method(){
System.out.println("我是具体的产品A")
}
}
// 具体产品类B
public class ConcreteProductB extends Product{
@override
public void method(){
System.out.println("我是具体的产品B")
}
}
// 抽象工厂类
public abstract class Factory{
// 抽象工厂方法 具体生产什么由子类实现
public abstract Product createProduct();
// 另一种实现
public abstract <T extends Product > T createProduct(Class<T> clz)
}
// 具体工厂类
public class ConcreteFactory extends Factory{
@override
public Product createProduct(){
return new ConcreteProductA()
}
// 另一种实现
public <T extends Product> T createProduct(Class<T> clz){
Product p=(=null
try{
p=(Product)class.forName(clz.getName()).newInstance()
}catch(Exception e){
}
return (T)p;
}
}
public class Client{
public static void main (String[] args){
Factory factory=new ConcreteFactory();
// 一种实现
Product p=factory.createProduct();
// 另一种实现
Product p=factory.createProduct(ConcreteProductB.class);
p.method();
}
}
优缺点
-
优点
分离接口与实现,客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已,使其从具体的产品实现中解构,同时基于接口与实现的分离,使抽象工厂方法模式在切换产品类时更加灵活、容易 -
缺点
一是类文件的爆炸性增加,二是不太容易拓展新的产品类,因为每当我们增加一个产品类就需要修改抽象工厂,那么所有的具体工厂类均会被修改
如果能帮助您,请点赞、关注