java工厂设计模式详解 java简单工厂模式及代码
工厂模式通过封装对象创建过程来降低维护连接,提高灵活和可性。1. 工厂简单模式将创建逻辑集中在一个工厂类中,优点是简单易懂,缺点是违反开闭原则;2. 工厂方法模式通过定义创建接口并由子类实现,遵循开闭原则且易于扩展,但需要创建多个工厂类;3. 抽象工厂模式用于创建一组相关或依赖对象,支持产品类别的切换,但增加类别数量且扩展困难。当类别需要创建的对象、希望由子类创建指定或需要切换相关对象时组应使用工厂关系模式。工厂模式可通过解耦依赖辅助实现依赖注入。根据需求复杂度选择时:简单场景用简单工厂,多类型或需扩展用工厂方法,多产品类别用抽象工厂。
工厂模式,简单来说,就是把对象的创建过程封装起来,让客户端代码不需要直接新对象,而是通过工厂来获取。这样可以降低耦合,提高代码的灵活性和可维护性。
解决方案
工厂模式的核心提供了一个工厂接口或抽象类,然后由具体的工厂类来实现对象的创建。
立即学习“Java免费学习笔记(深入)”;
简单工厂模式(Simple)工厂模式)
简单的工厂模式实际上不是一个设计模式,而是一种编程习惯。下面的对象在一个工厂类中创建逻辑流程图。
// 产品接口 interface Product { void use();}// 具体产品A class ConcreteProductA implements Product { @Override public void use() { System.out.println(quot;Using ConcreteProductAquot;); }}// 具体产品B class ConcreteProductB implements Product { @Override public void use() { System.out.println(quot;Using ConcreteProductBquot;); }}// 简单工厂 class SimpleFactory { public static Product createProduct(String type) { if (quot;Aquot;.equals(type)) { return new ConcreteProductA(); } else if (quot;Bquot;.equals(type)) { return new ConcreteProductB(); } else { return null; // 或者抛出异常 } }}// 客户端代码 public class Client { public static void main(String[] args) { Product productA = SimpleFactory.createProduct(quot;Aquot;); if (productA != null) { productA.use(); } Product ProductB = SimpleFactory.createProduct(quot;Bquot;); if (productB != null) { ProductB.use(); } }}登录后复制优点:简单易懂。缺点:违反开闭原则,如果需要增加新的产品,需要修改工厂类的代码。
工厂模式(Factory Method)模式)
工厂方法模式定义了一个创建对象的接口,但将实际创建对象的工作延迟到子类。每个具体工厂负责创建一个具体产品。
//抽象产品接口 Product { void use();}//具体产品Aclass ConcreteProductA implements Product { @Override public void use() { System.out.println(quot;Using ConcreteProductAquot;); }}//具体产品Bclass ConcreteProductB implements Product { @Override public void use() { System.out.println(quot;Using ConcreteProductBquot;); }}//抽象工厂接口 Factory { Product createProduct();}//具体工厂Aclass ConcreteFactoryA implements Factory { @Override public Product createProduct() { return new ConcreteProductA(); }}//具体工厂Bclass 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(); }}登录后复制优点:遵循开闭原则,易于扩展。缺点:需要创建多个工厂类,增加了类的数量。
抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式提供了一系列相关或相互依赖对象的接口,而无需为它们指定具体的类。可以理解为工厂模式方法的升级版本,解决创建多个产品类的问题。
// 抽象产品Ainterface ProductA { void use();}// 抽象产品Binterface ProductB { void operat();}// 具体产品A1class ConcreteProductA1 implements ProductA { @Override public void use() { System.out.println(quot;Using ConcreteProductA1quot;); }}// 具体产品A2class ConcreteProductA2 implements ProductA { @Override public void use() { System.out.println(quot;Using ConcreteProductA2quot;); }}// 具体产品B1class ConcreteProductB1 implements ProductB { @Override public void operat() { System.out.println(quot;Operating ConcreteProductB1quot;); }}// 具体产品B2class ConcreteProductB2 implements ProductB { @Override public void operat() { System.out.println(quot;Operating ConcreteProductB2quot;); }}// 抽象工厂interface AbstractFactory { ProductA createProductA(); ProductB createProductB();}//具体工厂1class ConcreteFactory1 implements AbstractFactory { @Override public ProductA createProductA() { return new ConcreteProductA1(); } @Override public ProductB createProductB() { return new ConcreteProductB1(); }}// 具体工厂2class ConcreteFactory2 implements AbstractFactory { @Override public ProductA createProductA() { return new ConcreteProductA2(); } @Override public ProductB createProductB() { return new ConcreteProductB2(); }}// 客户端代码public class Client { public static void main(String[]
args) { AbstractFactoryfactory1 = new ConcreteFactory1(); ProductA ProductA1 = factory1.createProductA(); ProductB ProductB1 = factory1.createProductB(); ProductA1.use(); ProductB1.operate(); AbstractFactory plant2 = new ConcreteFactory2(); ProductA ProductA2 = factory2.createProductA(); ProductB ProductB2 = factory2.createProductB(); ProductA2.use();productB2.operate(); }}登录后复制优点:可以创建一组相关的产品,易于切换产品族。缺点: 它增加了类的数量,如果需要增加新的产品类,需要修改所有工厂类。
什么时候应该使用工厂模式?当一个类不知道它所必须创建的对象的类的时候。当一个类希望由它的子类来指定所创建的对象的时候。当你需要创建一组相关的对象时,并且希
依赖注入(DI)是一种设计模式,它允许你将对象的依赖关系从对象本身中解耦出来。工厂模式可以用来实现依赖。你可以使用工厂来注入注入对象,然后这一些对象注入到其他对象中。这可以使你的代码更加灵活和可测试。
如何选择合适的工厂模式?
根据你的具体需求选择哪种工厂模式。如果你的代码很简单,并且只需要创建一种类型的对象,那么简单的工厂模式可能就足够了。你的代码比较复杂,并且需要创建多种类型的对象,或者需要能够方便地切换这些对象,工厂方法模式或者抽象工厂模式可能更适合。
以上就是Java中如何实现工厂模式创建那么对象的详细内容,更多请关注乐哥网其他常识文章相关!