工厂模式是一种创建型设计模式,它提供了一种将对象的创建与使用分离的方法。在工厂模式中,我们通过工厂类来创建对象,而不是直接在客户端代码中使用 new
关键字来创建对象。以下是一个简单的Java工厂模式示例代码:
产品接口
首先,我们定义一个产品接口,表示工厂要创建的对象:
// 产品接口
public interface Product {void operation();
}
具体产品类
然后,我们定义一些实现产品接口的具体产品类:
// 具体产品类A
public class ConcreteProductA implements Product {@Overridepublic void operation() {System.out.println("Concrete Product A operation");}
}// 具体产品类B
public class ConcreteProductB implements Product {@Overridepublic void operation() {System.out.println("Concrete Product B operation");}
}
工厂接口
接着,我们定义一个工厂接口,用于创建产品:
// 工厂接口
public interface Factory {Product createProduct();
}
具体工厂类
最后,我们定义具体的工厂类来创建产品对象:
// 具体工厂类A,用于创建具体产品类A的实例
public class ConcreteFactoryA implements Factory {@Overridepublic Product createProduct() {return new ConcreteProductA();}
}// 具体工厂类B,用于创建具体产品类B的实例
public class ConcreteFactoryB implements Factory {@Overridepublic Product createProduct() {return new ConcreteProductB();}
}
客户端代码
现在,我们可以在客户端代码中使用工厂来创建产品对象,而不需要关心具体的产品类:
public class Client {public static void main(String[] args) {// 创建工厂A,并使用它创建具体产品A的实例Factory factoryA = new ConcreteFactoryA();Product productA = factoryA.createProduct();productA.operation();// 创建工厂B,并使用它创建具体产品B的实例Factory factoryB = new ConcreteFactoryB();Product productB = factoryB.createProduct();productB.operation();}
}
示例说明
- 客户端代码只与工厂接口和产品接口打交道,不直接与具体产品类耦合,从而实现了解耦。
- 如果要添加新的产品,只需创建一个新的具体产品类和一个对应的具体工厂类即可,无需修改现有的代码,符合开闭原则。
- 工厂模式提供了一种灵活的方法来创建对象,可以根据具体的需求选择使用哪个具体工厂来创建产品对象。