工厂模式
定义一个创建对象的接口,让子类决定实例化哪一个工厂类。
主要解决接口选择的问题。
/**
* created by: cenjianteng
* 2020/4/20 22:27
*/
public class CarFactoryTest {
public static void main(String[] args) {
//简单的工厂例子
SimpleFactory simpleFactory = new SimpleFactory();
Car Alto = simpleFactory.getCar("奥拓");
Alto.make();
System.out.println("***********分割线***********");
AltoFactory altoFactory = new AltoFactory();
altoFactory.getCar();
QiruiFactory qiruiFactory = new QiruiFactory();
qiruiFactory.getCar();
}
}
/**
* 简单的工厂类
*/
class SimpleFactory {
public Car getCar(String type) {
if (type.equalsIgnoreCase("奇瑞")) {
return new Qirui();
} else if (type.equalsIgnoreCase("奥拓")) {
return new Alto();
}
return null;
}
}
interface Car {
Car make();
}
class Alto implements Car {
@Override
public Alto make() {
System.out.println("make 奥托");
return new Alto();
}
}
class Qirui implements Car {
@Override
public Qirui make() {
System.out.println("make 奇瑞");
return new Qirui();
}
}
/**
* 共有的制造方法(共有的业务逻辑)
*/
abstract class CarFactory {
abstract Car makeCar();
//从工厂里面提货
public Car getCar() {
System.out.println("加个车门");
System.out.println("加个轮胎");
Car car = makeCar();
return car;
}
}
class AltoFactory extends CarFactory {
@Override
Car makeCar() {
//奥拓独有的制造工序(业务逻辑)
return new Alto().make();
}
}
class QiruiFactory extends CarFactory {
@Override
Car makeCar() {
//奇瑞独有的制造工序(业务逻辑)
return new Qirui().make();
}
}