工厂模式是面向对象编程的核心概念之一。工厂模式分为三种类型:简单工厂模式、工厂方法模式和抽象工厂模式 。简单工厂模式是最常用的一种,它提供了一种创建对象的最佳方式。在简单工厂模式中,我们在创建对象时不需要知道具体的类名,只需要知道需要创建的对象的类型即可。而工厂方法模式则是一种更灵活的方式,它允许我们将创建对象的过程与使用对象的过程分离。
本文目录导读:
在面向对象编程中,工厂模式是一个非常核心的概念,它是一种创建型设计模式,提供了一种创建对象的最佳方式,工厂模式在很多情况下都非常实用,特别是当我们需要根据不同的条件来创建不同类型的对象时,本文将详细介绍工厂模式的基本概念、特点以及常见的实现方法。
工厂模式的基本概念
工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,在工厂模式中,我们不直接实例化对象,而是将对象的创建过程交给一个工厂类来完成,这样,我们可以在不修改客户端代码的情况下,增加新的产品族而无需修改原有代码。
工厂模式的特点
1、延迟实例化:工厂模式可以在真正需要对象的时候才创建对象,从而节省资源。
2、解耦合:通过将对象的创建过程交给工厂类,我们可以降低客户端与具体产品类之间的耦合度。
3、扩展性:当需要增加新的产品族时,我们只需要修改工厂类,而无需修改客户端代码。
4、可维护性:工厂模式使得我们可以将对象的创建过程封装在一个独立的地方,从而使得程序更容易维护。
工厂模式的实现方法
1、简单工厂模式(Simple Factory Pattern):
简单工厂模式是最简单的工厂模式实现,它通过一个静态方法来返回一个具体的产品类实例,这种方法的优点是简单易懂,但缺点是无法处理参数化的场景。
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 SimpleFactory { public static Product createProduct(String type) { if ("A".equalsIgnoreCase(type)) { return new ProductA(); } else if ("B".equalsIgnoreCase(type)) { return new ProductB(); } return null; } }
2、工厂方法模式(Factory Method Pattern):
工厂方法模式是在简单工厂模式的基础上进行改进的,它通过将对象的创建过程放在一个抽象的工厂类中来实现,这种方法的优点是可以处理参数化的场景,缺点是增加了系统的复杂度。
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 abstract class AbstractFactory { public abstract Product createProduct(String type); } public class ConcreteFactoryA extends AbstractFactory { @Override public Product createProduct(String type) { if ("A".equalsIgnoreCase(type)) { return new ProductA(); } else if ("B".equalsIgnoreCase(type)) { return new ProductB(); } return null; } }
3、抽象工厂模式(Abstract Factory Pattern):
抽象工厂模式是在工厂方法模式的基础上进行改进的,它通过提供多个具体工厂类来实现,这种方法的优点是可以处理更多的对象创建场景,缺点是增加了系统的复杂度。
public interface ProductA {} public interface ProductB {} public interface FactoryA {} public interface FactoryB {} public class ConcreteFactoryA implements FactoryA {} public class ConcreteFactoryB implements FactoryB {} public abstract class AbstractFactory implements FactoryA, FactoryB {} // 可以有多个具体实现类继承自该抽象工厂类,分别实现各自的产品接口和工厂接口,ConcreteFactoryA和ConcreteFactoryB都实现了这两个接口,然后就可以使用这个抽象工厂来创建具体产品了,如下所示: ...// 具体代码省略...```