Java设计模式———静态工厂
静态工厂方法是一种将类的运用者和产生着隔离的设计模式,它是一种创造型模式,但是它不属于23种基本设计模式中的一种,它是理解抽象工厂的基础
[参考yqj2065的博客](http://blog.csdn.net/yqj2065/article/details/8510074)
上课时yqj2065要求:除了JDK等框架或工具中的类,自己编写的类不得使用new创建对象(Test除外)。
据说是因为使用new会涉及到硬编码。(不是很懂)
所以要求用<b>God</b>类利用反射+配置文件来创建对象。
下面介绍如何创建并使用tool包中的工具类God:
1.属性配置文件
Java程序通常处理的配置文件有两种类型①XML格式的配置文件、②属性配置文件(.properties文件)
属性配置文件是一种简单的、易解析的文件格式。该.properties文件是一个文本文件,仅包含两种语法。
前面加有#号的行是注释;
以“键=值”的方式定义一个属性的配置信息。键值前后的空格在解析时候会被忽略;键不可以换行,值换行用“\”表示。
默认的属性配置文件为默认包目录下的my.properties,其内容为:
#本属性配置文件代表从数据库、属性配置文件或XML文件中获得字符串的各种技术。
#本文件用于多个程序,使用前要检查本文件是否进行了必要的修改。
#注意:键必须映射类全名。
1=Test1.Cat1
2=Test1.Cat2
3=HelperMethod.Method1
2. tool.God
使用JDK中的java.util.Properties类能够方便地处理属性配置文件。
God类getValue(String path,String key)方法从path指定的属性配置文件中,读取key的值,它是God类的核心,但是对于学习设计模式而言无关紧要。
重载的create ()方法是静态工厂。create (String path,String key)将调用getValue()方法,按照其返回的字符串,通过反射机制创建对象。其他重载的create则是简化了参数的方法。如create ()将从my.properties文件中读取typeName键映射的类全名,并创建其对象。
注意:create方法的返回值类型为Object,使用时客户代码需要自行将其向下造型为适当的类型。
God类如下:
```java
package tool;
import java.io.*;
import java.util.Properties;
public class God{
public static String getValue(String path,String key){
Properties props = new Properties();
try {
InputStream is = God.class.getClassLoader().getResourceAsStream(path) ;
try{
InputStreamReader isr = new InputStreamReader(is,"UTF-8");
props.load(isr);//从流中加载properties文件信息
}catch (java.io.FileNotFoundException e) { e.printStackTrace();}
}catch (java.io.IOException e) { e.printStackTrace();
}
return props.getProperty(key);
}
public static Object create(){
return create("my.properties","typeName");
}
public static Object create(String key){
return create("my.properties",key);
}
public static Object create(String path,String key){
String typeName = getValue(path,key);
Object obj=null;
if(typeName!=null){
try {
obj = Class.forName(typeName).newInstance();
} catch (InstantiationException e) { e.printStackTrace();
} catch (IllegalAccessException e) { e.printStackTrace();
} catch (ClassNotFoundException e) { e.printStackTrace();
}
}
return obj;
}
public static Object create(){
return create("my.properties","typeName");
}
public static Object create(String key){
return create("my.properties",key);
}
public static Object create(String path,String key){
String typeName = getValue(path,key);
Object obj=null;
if(typeName!=null){
try {
obj = Class.forName(typeName).newInstance();
} catch (InstantiationException e) { e.printStackTrace();
} catch (IllegalAccessException e) { e.printStackTrace();
} catch (ClassNotFoundException e) { e.printStackTrace();
}
}
return obj;
}
}
Java设计模式———静态工厂的更多相关文章
- 浅析JAVA设计模式之工厂模式(一)
1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...
- Java 设计模式之工厂模式(二)
原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...
- java设计模式2————工厂模式
1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展开放,对修改关闭 依赖倒转原则:面向 ...
- java设计模式--简单工厂
java设计模式--简单工厂 简单工厂不是一个标准的设计模式,但是很常用需要掌握. 在java应用开发中,要"面向接口编程". 1.java中接口的概念: 在java中接口是一种特 ...
- Java设计模式之工厂模式(Factory模式)介绍(转载)
原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...
- Java设计模式之工厂方法模式(转) 实现是抽象工厂?
Java设计模式之工厂方法模式 责任编辑:覃里作者:Java研究组织 2009-02-25 来源:IT168网站 文本Tag: 设计模式 Java [IT168 技术文章] ...
- 浅析JAVA设计模式之工厂模式(二)
1 工厂方法模式简单介绍 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory),在这样的模式中,核心工厂不再是一个详细的类.而是一个抽象工厂,提 ...
- java的设计模式 - 静态工厂方法
静态工厂方法,也不知道为何叫这个名字.其实也就是一个静态函数,可以替代构造函数用.大名鼎鼎的 guava 就大量使用这种模式,这是非常有用的模式. 比如是 Integer i = Integer.va ...
- Java设计模式之-----工厂模式(简单工厂,抽象工厂)
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...
随机推荐
- 算法模板——线段树6(二维线段树:区域加法+区域求和)(求助phile)
实现功能——对于一个N×M的方格,1:输入一个区域,将此区域全部值作加法:2:输入一个区域,求此区域全部值的和 其实和一维线段树同理,只是不知道为什么速度比想象的慢那么多,求解释...@acphile ...
- mybatis 使用场景
1.Database design is often a separate function (with separate management) from OO domain design 数据库设 ...
- Go语言并发机制初探
Go 语言相比Java等一个很大的优势就是可以方便地编写并发程序.Go 语言内置了 goroutine 机制,使用goroutine可以快速地开发并发程序, 更好的利用多核处理器资源.这篇文章学习 g ...
- 感知机和线性单元的C#版本
本文的原版Python代码参考了以下文章: 零基础入门深度学习(1) - 感知器 零基础入门深度学习(2) - 线性单元和梯度下降 在机器学习如火如荼的时代,Python大行其道,几乎所有的机器学习的 ...
- 有个程序猿要去当CEO了:(二)扬帆起航
合同签好了. 从昨天下午三点半,一直修改到晚上七点半,才确定签下. 这过程中,有一点讨论得比较久: 就是甲方要不要也拿底薪. 甲方是这样说的:"总经理拿N仟元,董事长不要说比总经理高,但是也 ...
- 解决 Linux error while loading shared libraries: cannot open shared object file: No such file or directory
安装最新版本Emqtt,参照官方文档安装后,执行报错: Linux error while loading shared libraries libsctp.so.1: cannot open sha ...
- spdlog源码阅读 (1): sinks
0. spdlog简单介绍 spdlog 是一个快速的 C++ 日志库,只包含头文件,兼容 C++11.项目地址 特性: 非常快 只包含头文件 无需依赖第三方库 支持跨平台 - Linux / Win ...
- 解决HTML textarea 标签出现大量空格
就是什么内容也不写,然后前面却有一堆空格 原因是 textarea标签换行了 <textarea cols=" id="serve_content" name=&q ...
- windos环境apache+mysql+php+Discuz的安装配置
首先是相关软件的下载:PHP.Apache和Mysql软件以及VC库.相关软件可到我的百度网盘下载,百度网盘:http://pan.baidu.com/s/1o6DYcMu 相关软件的直接下载地址: ...
- Nginx的配置文件详解
主配置文件: 查看nginx的进程可以看到nginx所使用的配置文件: 主配置一般会被用来设置一些全局的参数: 参数详解: user nobody nobody; //设置nginx ...