var slideIndex = 1; showSlides(slideIndex); function plusSlides(n) { showSlides(slideIndex += n); } function currentSlide(n) { showSlides(slideIndex = n); } function showSlides(n) { var i; var slides = document.getElementsByClassName("mySlides"); var dots = document.getElementsByClassName("dot"); if (n > slides.length) {slideIndex = 1} if (n < 1) {slideIndex = slides.length} for (i = 0; i < slides.length; i++) { slides[i].style.display = "none"; } for (i = 0; i < dots.length; i++) { dots[i].className = dots[i].className.replace(" active", ""); } slides[slideIndex-1].style.display = "block"; dots[slideIndex-1].className += " active"; }

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;
}    

}

posted @ 2017-04-27 12:04  Solomon_xm  阅读(833)  评论(0编辑  收藏  举报