需要掌握:工厂模式
概述
简单工厂模式是属于创建型模式,是用 工厂方法 代替 new 操作的一种模式
简单工厂一般分为:
- 简单工厂-普通方式
- 简单工厂-静态方法
步骤
- 定义“产品”接口
- 定义若干 “产品”接口实现类
- 定义工厂类,该类的方法返回“产品”对象
案例
简单工厂-普通方式
定义“产品”接口:
public interface InterPhone {
public void call(String num);
public void about();
}
定义若干 “产品”接口实现类
class IPhone implements InterPhone{
String name;
String cpu;
int rom;
int ram;
int battery;
@Override
public void call(String num) {
System.out.println("用iphone打电话给 "+num);
}
@Override
public void about() {
System.out.println("配置是:");
System.out.println("name:"+name);
System.out.println("cpu:"+cpu);
System.out.println("rom:"+rom);
System.out.println("ram:"+ram);
System.out.println("battery:"+battery);
}
}
class MiPhone implements InterPhone{
String name;
String cpu;
int rom;
int ram;
int battery;
@Override
public void call(String num) {
System.out.println("用小米打电话给 "+num);
}
@Override
public void about() {
System.out.println("配置是:");
System.out.println("name:"+name);
System.out.println("cpu:"+cpu);
System.out.println("rom:"+rom);
System.out.println("ram:"+ram);
System.out.println("battery:"+battery);
}
}
定义工厂类
public class PhoneFactory {
public static InterPhone getPhone(String name){
InterPhone ret=null;
if("iphone11".equals(name)){
IPhone phone = new IPhone();
phone.name="iphone11";
phone.cpu="A13";
phone.rom=64;
phone.ram=2;
phone.battery=3000;
ret=phone;
}else if("xiaomi9".equals(name)){
MiPhone phone = new MiPhone();
phone.name="小米9";
phone.cpu="骁龙855";
phone.rom=256;
phone.ram=16;
phone.battery=5000;
ret=phone;
}
return ret;
}
}
测试
public class Test {
public static void main(String[] args) {
InterPhone ip=PhoneFactory.getPhone("iphone11");
ip.about();
ip.call("110");
}
}
缺点
如果传递的字符串出错,则不能正确创建对象
简单工厂-多个静态方法
工厂类 提供多个静态方法,不需要创建工厂对象,通过工厂的静态方法,分别创建对象
改造工厂类
public class PhoneFactory3 {
public static InterPhone getIPhone11(){
IPhone phone = new IPhone();
phone.name="iphone11";
phone.cpu="A13";
phone.rom=64;
phone.ram=2;
phone.battery=3000;
return phone;
}
public static InterPhone getXiaomi9(){
MiPhone phone = new MiPhone();
phone.name="小米9";
phone.cpu="骁龙855";
phone.rom=256;
phone.ram=16;
phone.battery=5000;
return phone;
}
}
测试类
public class Test {
public static void main(String[] args) {
InterPhone ip=PhoneFactory3.getXiaomi9();
ip.about();
ip.call("110");
}
}
优点
简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。明确区分了各自的职责和权力,有利于整个软件体系结构的优化
缺点
由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
扩展困难,添加新产品,就需要增加方法,违背 “开闭原则”;在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
简单工程模式在JDK中的使用
参考:
https://www.cnblogs.com/geek6/p/3951677.html
https://blog.csdn.net/weixin_44774355/article/details/104858407


