前提代码
public interface Car {
void name();
}
public class Ferrari implements Car {
@Override
public void name() {
System.err.println("法拉利");
}
}
public class Porsche implements Car {
@Override
public void name() {
System.err.println("保时捷");
}
}
最原始的写法,客户直接创建Car
/**
* 客户
**/
public class Customer {
public static void main(String[] args) {
// 使用接口实现
Car porsche = new Porsche();
Car ferrari = new Ferrari();
porsche.name();
ferrari.name();
}
}
简单工厂模式 - 用户从工厂拿车,不用关心拿车细节
代码文件如下图
/**
* 简单工厂模式 / 静态工厂模式
* 缺点:不满足开闭原则,需要修改代码
*/
public class CarFactory {
public static Car getCar(String car) {
// 方法一
if (car.equals("Porsche")) {
return new Porsche();
} else if (car.equals("Ferrari")) {
return new Ferrari();
} else {
return null;
}
}
// 方法二
public static Car getPorsche() {
return new Porsche();
}
public static Car getFerrari() {
return new Ferrari();
}
}
public class Customer {
public static void main(String[] args) {
// 使用工厂实现
Car p1 = CarFactory.getCar("Porsche");
Car f1 = CarFactory.getCar("Ferrari");
p1.name();
f1.name();
Car p2 = CarFactory.getPorsche();
Car f2 = CarFactory.getFerrari();
p2.name();
f2.name();
}
}