简单工厂模式

        简单工厂模式就是将对象产生的细节进行隐藏,客户端只负责调用即可。简单工厂模式又叫静态工厂方法模式,它定义一个具体的工厂类来负责创建类的对象。

        简单工厂模式主要由3部分组成:工厂类、抽象类、和实现抽象类的具体类。

以一个简单的翻译器为例:

接口类(Translate.java):

package com.simplefactory;

public interface Translate {
public String sayTxt(String txt);
}

实现中文翻译的实现类(ChineseTranslate.java),示意代码如下:

package com.simplefactory;

public class ChineseTranslate implements Translate {

    @Override
    public String sayTxt(String txt) {
        return "您好" + txt;
    }

}

实现英文翻译的实现类(EnglishTranslate.java),示意代码如下:

package com.simplefactory;

public class EnglishTranslate implements Translate {

    @Override
    public String sayTxt(String txt) {
        return "Hello:" + txt;
    }

}

工厂类(SimpleFactory.java)的示意代码如下:

package com.simplefactory;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class SimpleFactory {
    public Translate getTranslate(String type) {
        Translate translate = null;
        try {
            Properties p = new Properties();
            InputStream in = null;
            try {
                in = SimpleFactory.class.getResourceAsStream("class.properties");
                p.load(in);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            translate = (Translate)Class.forName(p.getProperty(type)).newInstance();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return translate;
    }
}

客户端(Client.java)的示意代码如下:

package com.simplefactory;

public class Client {
    public static void main (String[] args) {
        SimpleFactory simpleFactory = new SimpleFactory();
        Translate translate = simpleFactory.getTranslate("Chinese");
        System.out.println(translate.sayTxt("测试"));
        translate = simpleFactory.getTranslate("English");
        System.out.println(translate.sayTxt("测试"));
    }
}

因为是通过配置文件来判断具体使用哪一个实现类,所以要在包下新建一个class.properties文件,定义要传入的参数,示意代码如下:

Chinese=com.simplefactory.ChineseTranslate
English=com.simplefactory.EnglishTranslate

运行客户端可以看到输出结果如下:

您好测试
Hello:测试

       使用简单工厂模式可以实现面向接口而不是面向具体编程,通过XML或者properties来进行配置会使得程序具有较好的可扩展性,便于之后维护工作的进行。





你可能感兴趣的:(properties,简单工厂模式,java反射机制)