了解,但是脑子里面一直没有体系,今天有时间整理一下
概念:在Java中,工厂设计模式是一种创建型设计模式,它主要用于封装对象的创建过程,将对象的实例化逻辑与客户端代码分离,从而提高代码的可维护性和可扩展性。
工厂模式有三种主要的变体:简单工厂模式、工厂方法模式和抽象工厂模式。我们分别来看
简单工厂模式
简单工厂模式通过一个工厂类来创建对象。这个工厂类根据传入的参数决定创建哪种类型的产品对象,客户端代码通过工厂类来获取对象,而不是直接使用new关键字。
缺点是当产品种类增加时,工厂类需要修改,这违反了开闭原则
一个例子辅助理解(只有一个产品接口,工厂是很笨的工厂😁):
public interface Product {
void use();
}
class ConcreteProductA implements Product {
@Override
public void use() {
System.out.println("Using ConcreteProductA");
}
}
class ConcreteProductB implements Product {
@Override
public void use() {
System.out.println("Using ConcreteProductB");
}
}
class SimpleFactory {
public Product createProduct(String type) {
if ("A".equals(type)) {
return new ConcreteProductA();
} else if ("B".equals(type)) {
return new ConcreteProductB();
}
return null;
}
}
public class Client {
public static void main(String[] args) {
SimpleFactory factory = new SimpleFactory();
Product productA = factory.createProduct("A");
productA.use();
Product productB = factory.createProduct("B");
productB.use();
}
}
工厂方法模式
工厂方法模式是将工厂抽象为接口,然后每一个产品去实现工厂接口。区别在于每个具体工厂类负责创建一种产品对象
也好理解,就是把工厂抽象为接口,然后产品去实现接口,在使用的时候直接通过工厂接口来获取产品对象
例子辅助理解(只能有一个产品接口,然后一个工厂接口,一个产品接口对应一个工厂接口😎):
interface Product {
void use();
}
class ConcreteProductA implements Product {
@Override
public void use() {
System.out.println("Using ConcreteProductA");
}
}
class ConcreteProductB implements Product {
@Override
public void use() {
System.out.println("Using ConcreteProductB");
}
}
interface Factory {
Product createProduct();
}
class ConcreteFactoryA implements Factory {
@Override
public Product createProduct() {
return new ConcreteProductA();
}
}
class ConcreteFactoryB implements Factory {
@Override
public Product createProduct() {
return new ConcreteProductB();
}
}
public class Client {
public static void main(String[] args) {
Factory factoryA = new ConcreteFactoryA();
Product productA = factoryA.createProduct();
productA.use();
Factory factoryB = new ConcreteFactoryB();
Product productB = factoryB.createProduct();
productB.use();
}
}
抽象工厂模式
多个产品接口,多个工厂接口🙌🙌🙌
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。