[设计模式]工厂方法模式

    xiaoxiao2025-06-24  5

     

         工厂方法模式(Factory Patern),是创建型设计模式之一。工厂方法模式是一种结构简单的模式;

     

     

    定义:

    定义一个用于创建对象的接口,让子类决定实例化哪个类。

     

    使用场景:

    在任何需要生成复杂对象的地方,都可以使用工厂方法模式。复杂对象适合使用工厂模式,用new就可以完成创建的对象无需使用工厂模式。

     

    UML类图:

     

     

    示例:

     

    public abstract class Product { /** * 产品类的抽象方法 * 由具体的产品类去实现 */ public abstract void method(); }

     

     

    public class ConcreteProductA extends Product { @Override public void method() { System.out.println("具体的产品A"); } }

     

     

    public class ConcreteProductB extends Product { @Override public void method() { System.out.println("具体的产品B"); } }

     

    public abstract class Factory { /** * 抽象工厂方法 * 具体生产什么由子类去实现 * @return 具体的产品对象 */ public abstract Product createProduct(); /** * * @param cls 产品对象类类型 * @return 具体的产品对象 */ public abstract <T extends Product> T createProduct(Class<T> cls); public static Product createProduct1(){ return new ConcreteProductB(); } }

     

     

    public class ConcreteFactory extends Factory { @Override public Product createProduct() { return new ConcreteProductA() ; } @Override public <T extends Product> T createProduct(Class<T> cls) { Product p = null; try{ p = (Product) Class.forName(cls.getName()).newInstance(); }catch(Exception e){ e.printStackTrace(); } return (T) p; } }

     

     

     

     

    public class Main { public static void main(String[] args) { Factory factory = new ConcreteFactory(); Product p = factory.createProduct(); p.method(); } }

    示例中主要分为四大模块,一是抽象工厂,其为工厂方法模式的核心;二是具体工厂,其实现了具体的业务逻辑;三是抽象产品,是工厂方法模式所创建的产品的父类;四是

     

    具体产品,为实现抽象产品的某个具体产品的对象。

    示例中Factory包含一个利用反射的方式实现的工厂方法方式,此时,需要在工厂方法的参数列表中传入一个Class类来决定是哪一个产品类。这种方法比较简洁、动态、如

    果不喜欢这种方式,也可以尝试为每一个产品都定义一个具体的工厂。

    当我们的工厂只有一个的时候,,那么可以简化掉抽象类是没问题的,只需要将对应的工厂方法改为静态方法即可。

     

    public static Product createProduct1(){ return new ConcreteProductB(); }public static Product createProduct1(){ return new ConcreteProductB(); }

    这种方式又称为简单工厂或静态工厂,它是工厂方法模式的一个弱化版本。

     

     

    总结:

    工厂方法模式是一个很好的设计模式,是完全符合设计原则的,其降低了对象之间的耦合度,而且,工厂方法模式依赖于抽象的架构,其将实例化的任务交由子类去完成,

    有非常好的扩展性。

     

    缺点:每次我们为工厂方法模式添加新的产品时就要编写一个新的产品类,同时还要引入抽象层,这必然会导致类结构的复杂化,所以,在某些情况比较简单时,是否要使用工厂模式,需要权衡利弊了。  

     

     

     

     

     

     

     

     

     

     

     

    转载请注明原文地址: https://ju.6miu.com/read-1300299.html
    最新回复(0)