小标
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
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号