Java实现工厂模式
工厂模式是一种创建型设计模式,用于创建对象。它隐藏了对象的具体实现,只向客户端提供一个统一的接口来创建对象。通过将对象的创建逻辑委托给工厂类,客户端可以避免直接实例化对象,从而提高代码的可维护性和灵活性。 适用的场景: 1. 当一个类不知道或不关心它需要创建的对象的类时,可以使用工厂模式,例如,客户端只需要知道抽象产品类接口,而不需要知道具体产品类的实现。 2. 当一个类希望由子类来指定创建对象时,可以使用工厂模式,例如,可以将产品的创建过程移到子类中。 3. 当一个类需要根据运行时的条件创建不同的对象时,可以使用工厂模式。 好处: 1. 工厂模式将对象的创建与使用分离,使得客户端只需要关心对象的使用,而不需要关心对象的创建过程。 2. 工厂模式满足了开放-封闭原则,即对扩展开放,对修改封闭。可以通过添加新的具体产品类来扩展工厂,而不需要修改客户端代码。 3. 工厂模式可以很好地封装创建对象的细节,使得客户端代码更加简洁、可读性更高。 下面是一个使用Java语言实现工厂模式的完整样例代码: ```java // 抽象产品类 interface Product { void operation(); } // 具体产品类A class ConcreteProductA implements Product { @Override public void operation() { System.out.println("ConcreteProductA"); } } // 具体产品类B class ConcreteProductB implements Product { @Override public void operation() { System.out.println("ConcreteProductB"); } } // 工厂类 class Factory { public Product createProduct(String productType) { if (productType.equals("A")) { return new ConcreteProductA(); } else if (productType.equals("B")) { return new ConcreteProductB(); } else { throw new IllegalArgumentException("Invalid product type"); } } } // 客户端 class Client { public static void main(String[] args) { Factory factory = new Factory(); Product productA = factory.createProduct("A"); productA.operation(); Product productB = factory.createProduct("B"); productB.operation(); } } ``` 在上述代码中,`Product`表示抽象产品类,`ConcreteProductA`和`ConcreteProductB`表示具体产品类,`Factory`表示工厂类。`Factory`类中的`createProduct`方法根据传入的产品类型来创建相应的具体产品对象。 在客户端代码中,通过工厂类的`createProduct`方法来创建具体产品对象,并调用其`operation`方法。根据传入的产品类型,工厂类返回对应的具体产品对象。输出结果为: ``` ConcreteProductA ConcreteProductB ```