静态工厂方法是一种将类的运用者和产生着隔离的设计模式,它是一种创造型模式,但是它不属于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;
}

}

Java设计模式———静态工厂的更多相关文章

  1. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  2. Java 设计模式之工厂模式(二)

    原文地址:Java 设计模式之工厂模式(二) 博客地址:http://www.extlight.com 一.背景 本篇内容是 Java 设计模式创建型模式的第二篇.上一篇主题为 <Java 设计 ...

  3. java设计模式2————工厂模式

    1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展开放,对修改关闭 依赖倒转原则:面向 ...

  4. java设计模式--简单工厂

    java设计模式--简单工厂 简单工厂不是一个标准的设计模式,但是很常用需要掌握. 在java应用开发中,要"面向接口编程". 1.java中接口的概念: 在java中接口是一种特 ...

  5. Java设计模式之工厂模式(Factory模式)介绍(转载)

    原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工 ...

  6. Java设计模式之工厂方法模式(转) 实现是抽象工厂?

    Java设计模式之工厂方法模式 责任编辑:覃里作者:Java研究组织   2009-02-25   来源:IT168网站   文本Tag: 设计模式 Java [IT168 技术文章]         ...

  7. 浅析JAVA设计模式之工厂模式(二)

    1 工厂方法模式简单介绍 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory),在这样的模式中,核心工厂不再是一个详细的类.而是一个抽象工厂,提 ...

  8. java的设计模式 - 静态工厂方法

    静态工厂方法,也不知道为何叫这个名字.其实也就是一个静态函数,可以替代构造函数用.大名鼎鼎的 guava 就大量使用这种模式,这是非常有用的模式. 比如是 Integer i = Integer.va ...

  9. Java设计模式之-----工厂模式(简单工厂,抽象工厂)

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...

随机推荐

  1. i++和++i 的学习

    在<<C++ Primer>> 第四版 5.5中讲解到: ++i:返回操作之后的结果,且是个左值. i++:返回操作之前的结果,且是有右值. // 2_3.cpp : 定义控制 ...

  2. Java 反射的理解

    反射反射,程序员的快乐,今天你快乐了吗?如果你不快乐,没关系,接下来让你快乐起来! 一.什么是反射? 通过百度百科我们可以知道,Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性 ...

  3. String.format()的总结

    JAVA字符串格式化-String.format()的使用 常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的spri ...

  4. python + selenium <二>

    应用Webdriver,实现自动化 #coding:gbk from selenium import webdriver import os from selenium.webdriver.suppo ...

  5. Android全局异常捕捉

    // 定义自定义捕捉 package com.xiaosw.test; import java.io.File; import java.io.FileOutputStream; import jav ...

  6. RPC漏洞

    DCOM漏洞:利用这个漏洞攻击者只需发送特殊形式的清求到远程计算机上的135端口,轻则会造成拒绝服务攻击,严重的甚至可以让远程攻击者以本地管理员权限执行任何操作. 攻击过程:扫描也可用xscan+DC ...

  7. reactjs Uncaught TypeError: Cannot read property 'location' of undefined

    reactjs Uncaught TypeError: Cannot read property 'location' of undefined reactjs 路由配置 怎么跳转 不成功 国内搜索引 ...

  8. css gray,grayscale,css变灰兼容大部分浏览器

    css gray,grayscale,css变灰兼容大部分浏览器 html { filter: url("data:image/svg+xml;utf8,<svg xmlns=\'ht ...

  9. iwebshop上传类的使用

    $upload = new IUpload('10240000',array('jpg','gif','png')); $dir = "upload/dian"; $upload- ...

  10. git操作详解

    前言:一般公司git的master主干与线上代码保持一致,在使用git的时候,偶尔会发生一些莫名其妙的事情,很容易导致运营事故.so- 总结一下经常使用的git命令以及git的一些小坑,方便日后查阅 ...