廢話一大堆:工廠模式有簡單工廠模式,工廠方法模式 抽象工廠模式這三種工廠模式各自有各自的應用場景,根據需要靈活選擇。
簡單工廠模式實現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種方式實現的簡單工廠模式