zoukankan      html  css  js  c++  java
  • 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;
    }    
    

    }

    宁鸣默笙
  • 相关阅读:
    第123天:移动web开发中的常见问题
    第122天:移动端开发常见事件和流式布局
    第121天:移动端开发基本知识
    第120天:移动端-Bootstrap基本使用方法
    第119天:移动端:CSS像素、屏幕像素和视口的关系
    加入收藏 设为首页代码收藏本页的代码和收藏本站的代码设为首页代码
    JQuery和UpdatePannel的问题
    JS中apply与call的用法
    Sumlime text3 安装包、汉化包、注册码
    使用WITH AS提高性能简化嵌套SQL
  • 原文地址:https://www.cnblogs.com/Solomon-xm/p/yqj2065.html
Copyright © 2011-2022 走看看