博客
关于我
1. 简单工厂模式
阅读量:637 次
发布时间:2019-03-14

本文共 2282 字,大约阅读时间需要 7 分钟。

简单工厂模式是一种设计模式,其核心思想是通过引入一个工厂类,让用户在使用对象时无需关心对象的具体创建细节,从而降低系统的耦合度,提高设计的可维护性和扩展性。

1. 简单工厂模式的定义

简单工厂模式(Static Factory Pattern)通过定义一个工厂类,根据传入的参数返回不同类的实例。这些实例通常都具有相同的父类。工厂类通常提供静态方法,这种模式也被称为静态工厂方法模式。它是一种创建型模式,主要用于将对象的创建过程与使用过程分离开来。

2. 工厂模式的角色

工厂模式的核心是工厂类的设计,通常包括以下三个角色:

  • 工厂角色(Factory)

    • 负责创建所有产品实例的内部逻辑。
    • 可以被外界直接调用,创建所需的产品对象。
    • 提供静态的工厂方法factoryMethod(),返回类型为Product的抽象产品类型。
  • 抽象产品角色(Abstract Product)

    • 是工厂类创建的所有对象的父类,封装了不同产品的共有方法。
    • 提供一个统一的接口,所有具体产品角色都需要实现它的方法。
  • 具体产品角色(Concrete Product)

    • 是最终的创建目标,继承自抽象产品角色。
    • 实现了抽象产品中声明的抽象方法,提供具体的产品功能。
  • 3. 工厂模式的实现

    简单工厂模式的实现通常包括以下几个部分:

  • 抽象产品类
  • public abstract class Product {    public void methodSame() {        // 公共方法的实现    }    public abstract void methodDiff(); // 抽象业务方法}
    1. 具体产品类A
    2. public class ConcreteProductA extends Product {    @Override    public void methodDiff() {        // 业务方法的实现    }}
      1. 具体产品类B
      2. public class ConcreteProductB extends Product {    @Override    public void methodDiff() {        // 业务方法的实现    }}
        1. 工厂类
        2. public class Factory {    public static Product getProduct(String type) {        Product product = null;        if (type.equals("A")) {            product = new ConcreteProductA();        } else if (type.equals("B")) {            product = new ConcreteProductB();        }        return product;    }}
          1. 客户端调用
          2. public class Client {    public static void main(String[] args) {        Product product = Factory.getProduct("A");        product.methodSame();        product.methodDiff();    }}

            4. 对象创建的几种方法

            在简单工厂模式中,对象的创建可以通过以下几种方式:

          3. 直接使用new关键字

            Object obj = new Object();

            优点:简单易行,缺点:难以扩展,需要修改源代码。

          4. 通过反射机制创建

            Object obj = (Object) Class.forName("com.example.MyClass").newInstance();

            优点:支持动态加载类,缺点:性能较差,且不符合Java的最佳实践。

          5. 通过克隆方法创建

            Object obj = objToClone.clone();

            优点:保留了对象的唯一性,缺点:需要实现clone()方法。

          6. 通过工厂类创建

            Product product = Factory.getProduct("A");

            优点:实现了对象创建与使用的分离,易于管理,适合多种产品类型,减少了类之间的耦合,支持动态配置(如通过配置文件)。

          7. 5. 工厂模式的优缺点

            简单工厂模式的使用具有以下优点:

          8. 实现对象创建与使用的分离:用户只需要关注对象的使用,不需要知道其创建过程。
          9. 对用户友好:用户只需传入参数,工厂自动返回正确的对象实例。
          10. 支持动态配置:可以通过配置文件或其他外部机制动态改变产品类的选择,减少代码修改。
          11. 其缺点包括:

          12. 工厂类职责过重:一旦工厂类出现故障或不能正常工作,整个系统都会受到影响。
          13. 增加类的复杂度:引入工厂类和抽象产品类会增加系统的类数量,增加维护成本。
          14. 不利于快速添加新产品:要添加新产品类型,需要修改工厂类的逻辑,降低了扩展性。
          15. 静态工厂方法的局限性:静态工厂方法无法形成基于继承的等级结构,限制了系统的灵活性。
          16. 6. 工厂模式的适用场景

            简单工厂模式适用于以下场景:

          17. 对象创建较少:系统中创建对象的频率较低。
          18. 客户端只了解参数,不关心具体实现:客户端只需要知道传入工厂类的参数,工厂自动返回相应的对象实例。
          19. 通过以上分析,可以清晰地看到简单工厂模式在设计模式中的重要作用,以及它在实际开发中的应用场景。

    转载地址:http://yzmoz.baihongyu.com/

    你可能感兴趣的文章
    Nginx模块 ngx_http_limit_conn_module 限制连接数
    查看>>
    nginx添加模块与https支持
    查看>>
    Nginx用户认证
    查看>>
    Nginx的location匹配规则的关键问题详解
    查看>>
    Nginx的Rewrite正则表达式,匹配非某单词
    查看>>
    Nginx的使用总结(一)
    查看>>
    Nginx的使用总结(三)
    查看>>
    Nginx的使用总结(二)
    查看>>
    Nginx的可视化神器nginx-gui的下载配置和使用
    查看>>
    Nginx的是什么?干什么用的?
    查看>>
    Nginx访问控制_登陆权限的控制(http_auth_basic_module)
    查看>>
    nginx负载均衡和反相代理的配置
    查看>>
    nginx负载均衡器处理session共享的几种方法(转)
    查看>>
    nginx负载均衡的5种策略(转载)
    查看>>
    nginx负载均衡的五种算法
    查看>>
    nginx转发端口时与导致websocket不生效
    查看>>
    Nginx运维与实战(二)-Https配置
    查看>>
    Nginx配置Https证书
    查看>>
    Nginx配置ssl实现https
    查看>>
    Nginx配置TCP代理指南
    查看>>