JAVA语言设计模式之简单工厂模式实现教程
小标 2018-12-26 来源 : 阅读 1672 评论 0

摘要:本文主要向大家介绍了JAVA语言设计模式之简单工厂模式实现教程,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言设计模式之简单工厂模式实现教程,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。


简单工厂模式(Simple Factory Pattern):定义一个工厂类,可以根据参数返回不同的类的实例,被创建的类的实例通常都有相同的父类。


简单工厂模式是根据参数创建实例的模式,创建方法通常是静态方法,也称为静态工厂模式。


结构和实现


角色包括:


工厂:提供静态方法,创建产品实例。 抽象产品:工厂类创建的对象的父类,封装了各种产品的共有方法。 具体产品:工厂类创建的对象。 角色的关系。


 静态工厂方法。


public class Factory {  

    public static Product getProduct(String arg) {  

        Product product = null;  

        if (arg.equalsIgnoreCase("A")) {  

            product = new ConcreteProductA();  

            //初始化设置product  

        }  

        else if (arg.equalsIgnoreCase("B")) {  

            product = new ConcreteProductB();  

            //初始化设置product  

        }  

        return product;  

    }  

}

   


客户端调用。


public class Client {  

    public static void main(String args[]) {  

        Product product;   

        product = Factory.getProduct(arg[0]); //通过工厂类创建产品对象  

        product.methodSame();  

        product.methodDiff();  

    }  

}

   


实例


开发一套图表库,可以根据参数,提供不同外观的图表,如柱状图、饼状图、折线图等,并可以较为方便的扩展,增加新的图表类型。 图表库结构。


 静态工厂方法。


public class ChartFactory {  

    public static Chart getChart(String type) {  

        Chart chart = null;  

        if (type.equalsIgnoreCase("histogram")) {  

            chart = new HistogramChart();  

            //初始化设置柱状图  

        }  

        else if (type.equalsIgnoreCase("pie")) {  

            chart = new PieChart();  

            //初始化设置饼状图 

        }  

        else if (type.equalsIgnoreCase("line")) {  

            chart = new LineChart();  

            //初始化设置折线图         

        }  

        return chart;  

    }  

}

   


客户端调用。


参数名称也可以从配置文件中读取,这样修改参数的时候无需修改源代码,符合开闭原则。


public class Client {  

    public static void main(String args[]) {  

        Chart chart; 

        //通过静态工厂方法创建产品 

        chart = ChartFactory.getChart("histogram");  

        chart.display();  

    }  

}

   


简化


可以将抽象产品类和工厂类合并,静态工厂方法放入抽象产品类中。



优缺点和适用环境


优点:


实现对象的创建和使用分离。工厂类根据参数和逻辑创建对象,客户端只需要使用对象而不需要创建。 简化复杂类名。客户端无需知道创建的类名,只需根据参数创建。 提高系统灵活性。引入配置文件,可以在不修改客户端源码的情况下更新产生的产品类。 缺点:


工厂类职责过重。工厂类集中所有的创建逻辑,一旦异常,系统都需要受到影响。 增加系统复杂度。增加工厂类这一新的类。 扩展困难。增加商品需要修改工厂类,产品较多时工厂逻辑复杂。 工厂角色无法实现基于继承的等级结构。使用了静态工厂方法。 适用环境:


工厂类负责创建的对象较少,不会使工厂方法的逻辑复杂。 客户端只知道创建对象的参数,不关心创建过程。


jdk中的应用


Integer.valueOf。根据int值返回Integer对象。


public static Integer valueOf(int i) {

    if (i >= IntegerCache.low && i <= IntegerCache.high)

        return IntegerCache.cache[i + (-IntegerCache.low)];

    return new Integer(i);

}

   


Class.forName。根据类名加载类。


public static Class forName(String className)

            throws ClassNotFoundException {

    Class caller = Reflection.getCallerClass();

    return forName0(className, true, ClassLoader.getClassLoader(caller), caller);

}

   


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved