Android中遇到的簡單工廠模式的幾種實現

廢話一大堆:工廠模式有簡單工廠模式,工廠方法模式 抽象工廠模式這三種工廠模式各自有各自的應用場景,根據需要靈活選擇。

簡單工廠模式實現1:

定義一個School接口

public interface School {
        StudentOne getStundent();
}

 定義接口實現類

public class SchoolImpl implements School {
    @Override
    public StudentOne getStundent() {
        StudentOne studentOne  =new StudentOne("小明","三班");
        return studentOne;
    }
}

Demo

      School schoolInterface = new SchoolImpl();
        schoolInterface.getStundent();

2.根據參數生產不通的實現

 定義接口實現類Two

public class SchoolImpl_Two implements School {
    @Override
    public StudentOne getStundent() {
        StudentOne studentOne = new StudentOne("小蘭","四班");
        return studentOne;
    }
}

定義一個工廠類傳入需要的參數

public class ParameterFactory {

    public static School getStudent(int parameter){
        switch (parameter){
            case 1 :
                 School school = new SchoolImpl();
                return school;
            case 2:
                return  new SchoolImpl_Two();
        }
        return  null;
    }
}

Demo:

        School school1 = ParameterFactory.getStudent(2);
        school1.getStundent();

3.根據配置文件產生不同的實現

添加配置文件config.properties

create_a=com.example.moveso.factory.impl.SchoolImpl
create_b=com.example.moveso.factory.impl.SchoolImpl_Two

定義配置文件讀取類

public class PropertiesFactory {

    public static School whoAtSchool(Context context, String key) {
        Properties properties = new Properties();
        try {
            InputStream inputStream = context.getAssets().open("config.properties");
            //如果放入了app/src/mian/res/raw文件中
//        InputStream inputStream1 =      context.getResources().openRawResource("config.properties");
       //java寫法
//        InputStream inputStream2 = PropertieaFactory.class.getResourceAsStream("assets/config.properties");
            properties.load(inputStream);
            Class clazz = Class.forName(properties.getProperty(key));
            return (School) clazz.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

demo實現:

 School school = PropertiesFactory.whoAtSchool(this,"create_a");
        school.getStundent();
        School school2 = PropertiesFactory.whoAtSchool(this,"create_b");
        school2.getStundent();

代買寫的比較亂以後會改進,根據需求3種方式實現的簡單工廠模式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章