创建型模式-工厂方法模式理解

文章介绍了如何使用工厂方法模式优化简单工厂模式,通过创建抽象接口和具体实现类,实现了在添加新指标时无需修改原有代码,遵循了开闭原则。同时,文章提到了工厂方法模式的主要优点是提高系统扩展性和隐藏创建细节,缺点是随着新指标的增加,类的数量也会增多,可能增加资源开销。
摘要由CSDN通过智能技术生成

目录

1.前言:

2.工厂方法demo优化

3.优缺点


1.前言:

上一篇文章写道创建型模式-简单工厂模式demo理解

简单工厂模式有一个缺点就是,创建对象的if、else if代码片段带到了工厂类里面去了,后面要是新增一个指标进行分析的话,还要在工厂类里面,重写新增一个 else if 代码片段,违背了开闭原则。

怎么样对这个缺点进行优化呢,就可以使用工厂方法模式进行优化,简单点就是,工厂类下面进行新增子类,不同指标类实现不同的创建对象和实现计算的api.

2.工厂方法demo优化

主要是工厂类接口层进行优化,

//抽象接口:情景分析接口层
interface Analysis {
    public void calculate();
}

//实现层:指标a分析
class AnalysisIndexA implements Analysis {
    public AnalysisIndexA() {
        System.out.println("指标a分析!");
    }

    public void calculate() {
        System.out.println("指标a计算完成!");
    }
}

//实现层:指标b分析
class AnalysisIndexB implements Analysis {
    public AnalysisIndexB() {
        System.out.println("指标b分析!");
    }

    public void calculate() {
        System.out.println("指标b计算完成!");
    }
}

//工厂类
interface analysisFactory {
    //工厂类只负责抽象一个接口
    public Analysis factoryMethod();

}
//指标a工厂类
class AnalysisIndexAFactory implements analysisFactory {
    public Analysis factoryMethod() {
        return new AnalysisIndexA();
    }
}

//指标a工厂类
class AnalysisIndexBFactory implements analysisFactory {
    public Analysis factoryMethod() {
        return new AnalysisIndexB();
    }
}


class Client {
    public static void main(String args[]) {
        //
        analysisFactory factory;
        factory = new AnalysisIndexAFactory();
        Analysis analysis;
        //通过静态工厂方法引用不同指标对象
        analysis = factory.factoryMethod();
        //开始进行指标计算
        analysis.calculate();
    }
}

3.优缺点

1. 主要优点

       工厂方法模式的主要优点如下:

       (1) 向调用方隐藏创建细节

       (2) 加入新指标计算时,无须修改抽象工厂和抽象产品提供的接口,无须修改客户端,也无须修改其他的具体工厂和具体产品,而只要添加一个具体指标工厂和具体指标类就可以了,这样,系统的可扩展性也就变得非常好,完全符合“开闭原则”。

  2. 主要缺点

     工厂方法模式的主要缺点如下:

      (1) 新增指标数量增加,类的个数也随之增加,增加资源开销


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值