工厂模式概念:
实现了创建者和调用者的分离
1.详细分类
简单工厂模式
用来生产同一等级结构中的任意产品(对于增加的新产品,需要修改已有代码)
工厂方法模式
用来生产同一等级结构中的固定产品(支持增加任意产品)
抽象工厂
用来生产不用产品族的全部产品(对于增加新的产品,无能为力,支持增加产品族)
2.简单工厂:
简单工厂模式也叫静态工厂模式,就是工厂类一般是静态方法,通过接受的参数不同来返回不同对象的实例。
工厂和里面的产品有实现共同的接口
对于新增加的产品无能为力,不修改代码,是无法扩展的
例如:
车辆工厂产出不同的车
定义一个工厂,里面new 出对象
工厂 Carfactory
类 BenZ BWM BYD
接口 CarBase
接口
public interface CarBase {
public abstract void init();
}
声明不同的类型
public class CarType {
public static final String BenZ = "BenZ";
public static final String BWM = "BWM";
public static final String BYD = "BYD";
}
产品
public class BenZ implements CarBase {
@Override
public void init() {
System.out.println("BenZ");
}
}
public class BWM implements CarBase {
@Override
public void init() {
System.out.println("BWM");
}
}
public class BYD implements CarBase{
@Override
public void init() {
System.out.println("BYD");
}
}
工厂
public class Carfactory implements CarBase{
private static Carfactory carfactory;
private HashMap<String,CarBase> hashMap = new HashMap<>();
private Carfactory(){
hashMap.put(CarType.BenZ, new BenZ());
hashMap.put(CarType.BWM,new BWM());
hashMap.put(CarType.BYD,new BYD());
}
public static Carfactory getInstance() {
if (carfactory==null){
throw new RuntimeException();
}
return carfactory;
}
public static void onInit(){
carfactory = new Carfactory();
}
public CarBase getCarName(String type){
return hashMap.get(type);
}
@Override
public void init() {
for (CarBase carBase : hashMap.values()){
carBase.init();
}
}
}
Main.java
Main类
public class Main {
public static void main(String[] args) {
System.out.println("-----------------简单工厂模式初始化-----------------");
Carfactory.onInit();
Carfactory carfactory = Carfactory.getInstance();
carfactory.init();
System.out.println("--------------------使用--------------------------");
CarBase benz = Carfactory.getInstance().getCarName(CarType.BenZ);
benz.init();
CarBase bwm = Carfactory.getInstance().getCarName(CarType.BWM);
bwm.init();
CarBase byd = Carfactory.getInstance().getCarName(CarType.BYD);
byd.init();
}
}
后续。。。