💛1.工厂模式简介
有三种工厂的模式:
1.1简单工厂模式:
常见常见消费者需要什么就去new 什么:
简单工厂模式实现了不需要直接new而是直接联系工厂即可
具体代码实现如下:
Car
public interface Car { void name(); }
Tesla
public class Tesla implements Car{ @Override public void name() { System.out.println("特斯拉"); } }
WuLing
public class WuLing implements Car{ @Override public void name() { System.out.println("五菱宏光"); } }
工厂代码
//此模式如果持续增加的话 会影响到开闭模式(简单工厂也可以称之为静态工厂模式) public class CarFactory { public static Car getConfig(String car){ //方法一 if (car.equals("五菱")){ return new WuLing(); }if (car.equals("特")){ return new Tesla(); }else { return null; } } //方法二 public static Car getWuling(String WuLing){ return new WuLing(); } public static Car getTesla(String Tesla){ return new Tesla(); } }
控制台 Consumer
public class Consumer { public static void main(String[] args) { //1.普通方法 Car wuLing = new WuLing(); Car tesla = new Tesla(); wuLing.name(); tesla.name(); // ------------------------ //2.工厂模式 Car le = CarFactory.getConfig("特"); Car les = CarFactory.getConfig("五菱"); le.name(); les.name(); } }
简单模式直接去new对象了然后获取他们的值展示出啦的;
工厂模式而是直接去调用工厂的代码,进行实现
他的弊端是:影响了开闭原则不应该在新增的时候去修改工厂的代码;
1.2工厂方法模式
WuLing
public class WuLing implements Car { @Override public void name() { System.out.println("五菱宏光"); } }
WuLingFactory
public class WuLingFactory implements CarFactory{ @Override public Car getcar() { return new WuLing(); } }
Tesla
public class Tesla implements Car { @Override public void name() { System.out.println("特斯拉"); } }
TeslaFactory
public class TeslaFactory implements CarFactory { @Override public Car getcar() { return new Tesla(); } } ```java **BaoMa** ```java public class BaoMa implements Car { @Override public void name() { System.out.println("宝马骑骑车"); } }
BaoMaFactory
public class BaoMaFactory implements CarFactory { @Override public Car getcar() { return new BaoMa(); } }
Car 每个车都会实现这个方法
//工厂模式 public interface Car { void name(); }
CarFactory 每个车的方法都会实现这个方法
//方法工厂方法模式 public interface CarFactory { Car getcar(); }
Consumer 控制台调用方法实现
public class Consumer { public static void main(String[] args) { //1.工厂方法 Car car = new WuLingFactory().getcar(); Car car2 = new TeslaFactory().getcar(); Car car3 = new BaoMaFactory().getcar(); car.name(); car2.name(); car3.name(); } }
运行结果如下:
(他完美的避免了开闭原则,但是他的实现类方法会不断增多也是一种不友好的用户的体验)
我们来看下实现图来更好的对他进行一个理解
两接口:一个代表车,一个代表车仓;每新增一种车就会新增一个车仓;
我们可以对比分析下:
简单工厂和方法工厂的对比
结构复杂度:简单工厂模式 代码复杂度:简单工厂模式 编程复杂度:简单工厂模式 管理复杂度:简单工厂模式 根据设计原则:工厂方法模式比较好(不会扰乱程序) 根据实际业务:简单工厂模式