Java设计模式学习-简单工厂模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40646143/article/details/85029216

工厂模式

  • 实现了创建者和调用者的分离 。
  • 详细分类又分为三类
  • 1), 简单工厂模式  -->用来生产同一等级结构中的任意产品。(对于增加新产品 ,需要修改已有的代码)
  • 2),工厂方法模式   -->用来生产同一等级结构中固定产品 。 (支持增加任意产品)
  • 3),抽象工厂模式   -->用来生产不同产品品类的全部产品 。(对于增加新的产品,无能无力 , 支持增加产品族)

核心本质 :

  • 实例化对象 ,用工厂方法代替 new 操作 。
  • 将选择实现类 , 创建对象统一管理和控制 。 从而将调用者跟我们的实现类解耦 。

所有面向对象的设计原则包括设计模式

  1. OCP (开闭原则 , Open -Closed Principle ) : 一个软件的实体应当对扩展开放 , 对修改关闭 。
  2. DIP (依赖倒转原则 , Dependence Inversion Principle ) :要针对接口编程 , 不要针对实现编程 。
  3. LOD (迪米特法则 , Law of Demeter ) :只与你直接的朋友通信 , 而避免和陌生人通信 。 

接下来实现简单工厂模式

1),  首先创建我们的Car类接口

/**
 *汽车类接口
 */
public interface Car {
    void run();
}

2),创建实现类 奥迪类与比亚迪类

/**奥迪类
 * @author 晓电脑
 */
public class AudiCar implements Car {
    @Override
    public void run() {
        System.out.println("奥迪车再跑");
    }
}


/**比亚迪类
 * @author 晓电脑
 */
public class BydCar implements Car {
    @Override
    public void run() {
        System.out.println("比亚迪再跑");
    }
}

3), 如果没有使用简单工厂模式 ,我们是这样创建奥迪类与比亚迪类的

/**
 * 没有工厂模式下创建车
 * 相当于调用者 调用者需要知道Car 还要知道AudiCar类
 */
public class NoFactoryTest {
    public static void main(String[] args) {
        Car car1 = new AudiCar();
        Car car2 = new BydCar();
        car1.run();
        car2.run();
    }
}

这样调用者不仅需要知道Car 这个接口 ,还要知道Car下面有几个实现 ,这就相当于一个司机,他不需要知道车是怎么创建的,他只要会开车就行了,接下来我们构建UML图来看一下

                    

接下来我们用简单工厂模式来看一下

创建一个工厂类

/**
 * 简单的工厂
 * 创建者
 *  如果现在增加新的类 如奔驰类 我们修改工厂类 违反了开闭原则 所以说简单工厂模式是有一些小问题
 *       
 */
public class FactoryCar {
    public static Car createCar(String type) {
        Car car = null;
        switch (type) {
            case "奥迪":
                car = new AudiCar();
                break;
            case "比亚迪":
                car=new BydCar();
                break;
                default:
        }
        return car;
    }
}

使用工厂模式我们就可以直接在工厂里面获取如下

/**
 * 工厂模式下创建车
 * 相当于调用者
 */
public class FactoryTest01 {
    public static void main(String[] args) {
        Car car1 = FactoryCar.createCar("奥迪");
        Car car2 = FactoryCar.createCar("比亚迪");
        car1.run();
        car2.run();
    }
}

在工厂模式下,我们只要告诉工厂我们需要什么车,然后工厂就给我们返回那个车,我们不需要知道奥迪车与比亚迪车是如何创建的我们来看下UML类图

                    

总结: 

  • 简单工厂模式又叫静态工厂模式 , 就是工厂类 一般使用静态方法 , 通过接受参数的不同来返回不同的实例对象。
  • 对于增加新产品无能为力 ! 不修改代码的话, 无法进行扩展 。

猜你喜欢

转载自blog.csdn.net/qq_40646143/article/details/85029216