通过传给工厂类的参数的不同,返回不同的对象
2020 / 4 / 30 参考:
简单工厂通过传给工厂类的参数的不同,返回不同的对象,包括三部分组成:
1、工厂类负责创建的对象比较少:由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂。
2、客户端只知道传入工厂类的参数,对于如何创建对象不关心:客户端既不需要关心创建细节,甚至连类名都不需要记住,只需要知道类型所对应的参数。
如果需要获取不同的手机对象,就可以使用简单工厂,具体的手机对象依赖于CPU, Camera等,通过简单工厂的封装,客户端获取 Phone 对象时就不需要了解具体的 ”生产过程“了.
实例化CPU, Camera 等配件时,也应该使用简单工厂。
package pers.junebao.simple_factory;
import pers.junebao.simple_factory.fitting.*;
import pers.junebao.simple_factory.phone.Honor;
import pers.junebao.simple_factory.phone.OnePlus;
import pers.junebao.simple_factory.phone.Phone;
public class PhoneFactory {
/**
* 一个用来产生 Phone 对象的工厂方法
* @param name 根据 name 产生不同的 Phone 的子类对象
* @return 返回实例化后的对象,name 不匹配返回 null
*/
public static Phone getPhone(String name) {
if(name.toLowerCase().equals("oneplus")){
// TODO:使用简单工厂重构
CPU cpu = new Qualcomm();
Camera camera = new Sony();
return new OnePlus(cpu, camera);
} else if (name.toLowerCase().equals("honor")) {
CPU cpu = new Kirin();
Camera camera = new Leica();
return new Honor(cpu, camera);
} else {
return null;
}
}
}
package pers.junebao.simple_factory;
import pers.junebao.simple_factory.phone.Phone;
public class Consumer {
public static void main(String[] args) {
Phone phone = PhoneFactory.getPhone("Honor");
assert phone != null;
phone.printConfig();
}
}