工厂模式是一种常用的设计模式,它提供了一种创建对象的最佳方式。工厂模式分为三种类型:简单工厂模式、工厂方法模式和抽象工厂模式。 ,,- 简单工厂模式:通过一个工厂类来创建其他类的实例,这种模式的优点是代码简洁,易于理解。但是随着产品种类的增加,工厂类的代码会变得臃肿,难以维护。,- 工厂方法模式:在工厂方法模式中,工厂类将创建对象的具体过程委托给子类来实现。这样每个子类都可以根据自己的需要实现创建对象的方法,从而提高了系统的可扩展性。,- 抽象工厂模式:抽象工厂模式提供了一个接口,用于创建一系列相关或相互依赖的对象。这种模式可以减少客户端与具体产品类之间的耦合度。
在编程中,工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
工厂模式主要包括三种类型:简单工厂模式、工厂方法模式和抽象工厂模式。
1、简单工厂模式:这是最基本的工厂模式,它提供了一种创建对象的最佳方式,在这种模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
2、工厂方法模式:这种模式是在简单工厂模式的基础上进一步发展而来的,它提供了一种将对象的创建延迟到其子类中的机制,从而使得客户端可以在不修改代码的情况下,增加或减少产品类。
3、抽象工厂模式:这种模式提供了一种创建一族相关或相互依赖对象的接口,无需指定它们具体的类。
下面我们通过实例来详细解释这三种工厂模式。
我们来看一下简单工厂模式,假设我们有一个产品类Product,它有三个子类:ProductA、ProductB和ProductC,我们希望在不知道具体产品类型的情况下,根据输入参数创建对应的产品。
public interface Product { void show(); } public class ProductA implements Product { @Override public void show() { System.out.println("ProductA"); } } public class ProductB implements Product { @Override public void show() { System.out.println("ProductB"); } } public class ProductC implements Product { @Override public void show() { System.out.println("ProductC"); } } public class SimpleFactory { public static Product createProduct(String type){ if("A".equals(type)){ return new ProductA(); }else if("B".equals(type)){ return new ProductB(); }else if("C".equals(type)){ return new ProductC(); }else{ return null; } } }
我们来看一下工厂方法模式,在这个模式中,我们创建了一个抽象的工厂类Factory,它有一个抽象的产品类Product,以及一个具体产品类ConcreteProductA、ConcreteProductB和ConcreteProductC,Factory类中有一个createProduct方法,这个方法返回一个产品对象,具体的产品类实现了createProduct方法,用于创建具体的产品对象。
public abstract class Factory { public abstract Product createProduct(); } public class ConcreteFactory extends Factory { @Override public Product createProduct() { if (true) { // 这里可以根据实际情况决定是否创建产品对象 return new ConcreteProductA(); // 根据条件返回具体产品对象或者调用其他工厂方法创建产品对象 } else { return null; // 或者直接返回null表示无法创建产品对象 } } }
我们来看一下抽象工厂模式,在这个模式中,我们有两个抽象的产品类ProductA和ProductB,以及一个具体产品类ConcreteProductA1、ConcreteProductA2和ConcreteProductB1、ConcreteProductB2,我们希望在不知道具体产品类型的情况下,根据输入参数创建对应的产品,这时,我们可以使用抽象工厂模式。