工厂方法模式是Java中最常用的设计模式之一,这类设计模式属于创造性模式。
本文通过一个具体的例子逐步分析实现工厂方法模式@mikechen的应用场景和优缺点
工厂方法模式的定义
工厂方法模式,也称为“静态工厂方法模式”,属于类创建模式,创建模式(工厂方法模式、抽象工厂、单例模式、生成器模式)也是如此。
用一个现实生活中的例子更容易理解:生活中的工厂负责生产产品。同样,在设计模式中,工厂方法模式可以理解为一个负责产生对象的类,称为“工厂类”。
工厂方法模式的结构
1.工厂级
工厂的角色负责实现创建所有实例的内部逻辑。
2.抽象产品
抽象产品角色是所有创建对象的父类,负责描述所有实例共享的公共接口。
3.特定产品
特定的产品角色是创建目标,所有创建的对象都充当该角色的特定类的实例。
工厂方法模式的实现
有三个主要步骤:
1.创建一个抽象产品类
创建抽象产品类的作用是定义特定产品的公共接口。
packagecom.mikechen.java.design.factory.***; /** * 抽象产品 * * @authormikechen */publicabstractclassProduct{ publicabstractvoidCreate(); }
2.创建特定的产品类别。
创建具体产品类的作用:继承抽象产品类,定义生产的具体产品。
packagecom.mikechen.java.design.factory.***; /** * 描述类的作用 * * @authormikechen */publicclassConcreteProductextendsProduct{ @OverridepublicvoidCreate(){ System.out.println("生产具体的产品"); } }
3.创建工厂类
创建工厂类的作用:通过创建静态方法,根据传入的不同参数创建具体产品类的不同实例。
packagecom.mikechen.java.design.factory.***; /** * 工厂 * * @authormikechen */publicclassFactory{ publicstaticProduct newInstance(){ returnnewConcreteProduct(); } }
我这里简化了一下,实际情况可以根据传入的具体产品参数来实现。
工厂方法模式的优缺点
1 .优势
将创建实例的工作和使用实例的工作分开,让用户不必关心如何创建类对象实现解耦;
把初始化实例的工作放在工厂里,让代码更容易维护。
2.不足之处
类集中了所有实例(产品)的创建逻辑。一旦这个工厂不能正常工作,整个系统都会受到影响。
与“开闭原则”相反,一旦增加新产品,就不得不修改工厂类的逻辑,这会导致工厂逻辑过于复杂。
由于工厂方法模式中使用的是静态工厂方法,静态方法无法继承和重写,这将导致工厂角色无法形成基于继承的层次结构。
工厂方法模式的应用场景
1.如果客户只知道传入工厂类的参数,不关心如何创建对象的逻辑;
2.客户端不需要关心创建细节,连类名都不需要记住,只需要知道类型对应的参数就可以了。
3.当工厂类负责创建较少的对象和特定的产品时,工厂方法中的业务逻辑不会太复杂,因为创建的对象较少。
工厂方法模式概述
1.工厂方法模式有三个角色:
工厂的角色是负责实现创建所有实例的内部逻辑;抽象产品角色是所有被创建对象的父类,负责描述所有实例共享的公共接口;特定的产品角色是创建目标,所有创建的对象都充当该角色的特定类的实例。
2.工厂方法模式最大的优点是把对象的创建和对象的使用分开,把对象的创建留给一个专门的工厂类,但它最大的缺点是工厂类不够灵活,需要修改工厂类的判断逻辑代码来添加新的具体产品。而且产品多的时候,工厂方法代码会很复杂。
3.简单工厂模式适用情况包括:工厂负责创建的对象比较少,客户端只知道传入工厂类的参数,对于如何创建对象不关心的情况。
本文来自一纸枕书投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/475020.html