第一种创建型模式(new Object )
-
工厂模式作用:实现了创建者和调用者的分离。
-
核心本质:
- 实例化对象不使用new,用工厂方法代替
- 将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
-
详细分类:
-
简单工厂模式
用来生产同一等级结构中的任意产品(对于增加新的产品,需要扩展已有代码);
// 定义接口 public interface Car { void name(); } public class Tesla implements Car { public void name() { System.out.println("特斯拉"); } } public class WuLing implements Car { public void name() { System.out.println("五菱"); } } /** * 开闭原则 */ public class CarFactory { // 简单工厂模式 public static Car GetCar(String car){ if (car.equals("五菱")){ return new WuLing(); }else if(car.equals("特斯拉")){ return new Tesla(); }else{ return null; } } // 静态工厂模式 public static Car getWuLing(){ return new WuLing(); } public static Car getTesla(){ return new Tesla(); } } public static void main(String[] args) { Car car = CarFactory.GetCar("五菱"); car.name(); Car tesla = CarFactory.getTesla(); tesla.name(); }
-
工厂方法模式
用来生产同一等级结构中的固定产品(支持增加任意产品);
public interface CarFactory { Car getCar(); } public class TeslaFactory implements CarFactory { public Car getCar() { return new Tesla(); } } public class WuLingFactory implements CarFactory { public Car getCar() { return new WuLing(); } } public static void main(String[] args) { Car car = new WuLingFactory().getCar(); car.name(); Car car1 = new TeslaFactory().getCar(); car1.name(); }
-
-
抽象工厂模式
围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
//手机接口 public interface IphoneProduct { void start(); void stop(); void callUp(); } //路由器接口 public interface IRouterProduct { void start(); void stop(); void openWifi(); } //小米手机 public class XiaoMiIphone implements IphoneProduct { public void start() { System.out.println("小米手机开机"); } public void stop() { System.out.println("小米手机关机"); } public void callUp() { System.out.println("小米手机打电话"); } } //小米路由器 public class XiaoMiIRouter implements IRouterProduct { public void start() { System.out.println("小米路由器开机"); } public void stop() { System.out.println("小米路由器关机"); } public void openWifi() { System.out.println("小米路由器打开WIFI"); } } // 产品工厂接口 public interface IProductFactory { // 返回产品 IphoneProduct productIphone(); IRouterProduct productIrouter(); } //小米工厂生产小米产品 public class XiaoMiProductFactory implements IProductFactory { public IphoneProduct productIphone() { return new XiaoMiIphone(); } public IRouterProduct productIrouter() { return new XiaoMiIRouter(); } }