工厂模式

作用:

  • 实现了创建者和调用者的分离

  • 详细分类

    • 简单工厂模式

    • 工厂方法模式

    • 抽象工厂模式

OOP七大原则(工厂模式满足下面三个原则)

  • 开闭原则:一个软件的实体应当对外扩展开放,对修改关闭

  • 依赖倒转原则:要针对接口编程,不要针对实现编程

  • 迪米特法则: 只与你直接的朋友通信,而避免和陌生人通信

核心本质:

  • 实例化对象不使用new,用工厂方法代替

  • 将选择实现类,创建统一管理和控制。从而将调用者跟我们实现类解耦

三种模式:

  • 简单工厂模式

    • 用来生产同一等级结构中的任意产品(对于增加新的产品,需要覆盖已有代码)

  • 工厂方法模式

    • 用来生产同一等级结构中的固定产品(支持增加任意产品)

  • 抽象工厂模式

    • 围绕一个超级工厂创建其他工厂。该工厂又称为其他工厂的工程。

简单工厂模式

Car.java

 package com.doudou.note.factory.simple;
 
 public interface Car {
     void name();
 }
 

Tesla .java

 package com.doudou.note.factory.simple;
 
 public class Tesla implements Car{
     @Override
     public void name(){
         System.out.println("特斯拉");
    }
 }
 

WuLing .java

 package com.doudou.note.factory.simple;
 
 public class WuLing implements Car{
     @Override
     public void name(){
         System.out.println("五菱宏光");
 
    }
 }
 

CarFactory.java

 package com.doudou.note.factory.simple;
 
 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;
        }
    }
 }
 

Consumer.java

 package com.doudou.note.factory.simple;
 
 public class Consumer {
     public static void main(String[] args) {
         //了解接口, 还有所有的实现类
         //1直接new
 //       Car car = new WuLing();
 //       Car car1 = new Tesla();
 //
 //       car.name();
 //       car1.name();
         //2.使用工厂创建
         Car car = CarFactory.getCar("五菱");
         Car car1 = CarFactory.getCar("特斯拉");
         car.name();
         car1.name();
 
    }
 }
 

输出结果

 五菱宏光
 特斯拉
 
 Process finished with exit code 0

 

CarFactory.java

 package com.doudou.note.factory.simple;
 //静态工厂模式
 //增加一个新的产品,如果你不修改代码,做不到!
 
 
 //开闭原则
 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();
    }
 }
 

第199天学习打卡(工厂模式 简单工厂模式)_ide

B站学习网址【狂神说Java】通俗易懂的23种设计模式教学(停更)哔哩哔哩bilibili