工厂模式
- 工厂模式是创建型模式
- 核心:
- 实例化对象不使用new ,用工厂方法代替
- 将选择实现类,创建对象统一管理和控制,从而将调用者跟我们的实现类解耦。
这里使用汽车工厂的案例来演示工厂模式
简单工厂模式(常用的)
首先创建一个汽车的接口
package com.zkw.factory.simple;
public interface Car {
public void name();
}
宝马和奥迪分别实现汽车接口
package com.zkw.factory.simple;
public class BM implements Car {
@Override
public void name() {
System.out.println("宝马!!!");
}
}
package com.zkw.factory.simple;
public class AuDi implements Car {
@Override
public void name() {
System.out.println("奥迪!!!!");
}
}
然后把这两个放到工厂里
package com.zkw.factory.simple;
public class CarFactory {
public static Car getCar(String car){
switch (car) {
case "宝马": return new BM();
case "奥迪": return new AuDi();
default:
System.out.println("没有此辆车");
return null;
}
}
}
解释:这里的new 就像相当于创建了这个车辆
消费者去车工厂里边那车
package com.zkw.factory.simple;
public class Customer {
public static void main(String[] args) {
CarFactory carFactory = new CarFactory();
Car car1 = carFactory.getCar("宝马");
Car car2 = carFactory.getCar("奥迪");
car1.name();
car2.name();
}
}
结果如下:
工厂方法模式
项目结构
相当于每一个车企都有一个自己的工厂,客户想要去买车,只需要去对应的工厂就可以了
车辆接口
package com.zkw.factory.method;
public interface Car {
public void name();
}
车工厂接口
package com.zkw.factory.method;
public interface CarFactory {
public Car getCar();
}
法拉利和保时捷分别实现车辆和车工厂接口
package com.zkw.factory.method.car;
import com.zkw.factory.method.Car;
public class Baoshijie implements Car {
@Override
public void name() {
System.out.println("保时捷!!!");
}
}
package com.zkw.factory.method.carFactory;
import com.zkw.factory.method.Car;
import com.zkw.factory.method.CarFactory;
import com.zkw.factory.method.car.Baoshijie;
public class BaoshijieFactory implements CarFactory {
@Override
public Car getCar() {
return new Baoshijie();
}
}
package com.zkw.factory.method.car;
import com.zkw.factory.method.Car;
public class Falali implements Car {
@Override
public void name() {
System.out.println("法拉利!!!!");
}
}
package com.zkw.factory.method.carFactory;
import com.zkw.factory.method.Car;
import com.zkw.factory.method.CarFactory;
import com.zkw.factory.method.car.Falali;
public class FalaliFactory implements CarFactory {
@Override
public Car getCar() {
return new Falali();
}
}
消费者去车工厂里边买车
package com.zkw.factory.method;
import com.zkw.factory.method.carFactory.BaoshijieFactory;
import com.zkw.factory.method.carFactory.FalaliFactory;
public class customer {
public static void main(String[] args) {
FalaliFactory falaliFactory = new FalaliFactory();
Car car = falaliFactory.getCar();
car.name();
BaoshijieFactory baoshijieFactory = new BaoshijieFactory();
Car car1 = baoshijieFactory.getCar();
car1.name();
}
}
结果如下