之前学的是单例模式,就是一个系统项目里面,只能有类的一个对象;
我们造车,有一个接口是车car,创建奥迪类,实现car接口,创建宝马类,实现car接口,再写一个工厂类car_factory类,这个里面写对应的方法,每一个方法代表创建一个车的对象;
所以我们以后造其他的车的时候,不仅得自己创建一个类继承car接口,还得修改工厂类car_factory类,里面新增一个方法去创建车的对象,所以修改的地方比较的多;
我们就得使用工厂模式;
● 1)简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式 ● 2)简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码) ● 3)在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式
比如创建不同车的对象,你要从这个工厂创建什么类型车,得在这个工厂加,
这个就是简单工厂模式
public class PizzaFactory {
public Pizza createPizza(String orderType) {
Pizza pizza = null;
switch (orderType) {
case "cheese":
pizza = new CheesePizza();
break;
case "greek":
pizza = new GreekPizza();
break;
case "pepper":
pizza = new PepperPizza();
break;
default:
break;
}
return pizza;
}
}
静态工厂模式也是简单工厂模式的一种,只是将工厂方法改为静态方法;
public class PizzaFactory {
public static Pizza createPizza(String orderType) {
// ...
}
}
以后使用这个工厂,就不需要创建这个对象之后使用里面的方法了,而是直接使用类调用静态方法就可以了;
要从工厂里面,拿出不同型号的宝马车,不同型号的奥迪车;
工厂方法模式:定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类
就是写一个抽象类,这个就是工厂的抽象类,不同的工厂都继承这个抽象类,实现里面的方法,方法里面写不同的逻辑,比如奥迪工厂继承这个car抽象类,宝马工厂继承这个car抽象类,奥迪工厂,宝马工厂都重写car抽象类里面的方法,方法里面的逻辑就是根据不同的型号创建不同的车;
相当于又提了一层;
简单工厂就是所有产品都由一个工厂类一个方法来创建,而工厂方法将工厂的职责也进行细化了,每种产品都由自己特定的工厂来生产,这也是单一职责原则的体现。
● 1)抽象工厂模式:定义了一个 interface 用于创建相关或有依赖关系的对象簇,而无需指明具体的类 ● 2)抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合 ● 3)从设计层面看,抽象工厂模式就是对简单工厂模式的改进(或者称为进一步的抽象) ● 4)将工厂抽象成两层,AbsFactory(抽象工厂)和具体实现的工厂子类。程序员可以根据创建对象类型使用对应的工厂子类。这样将单个的简单工厂类变成了工厂簇,更利于代码的维护和扩展;
抽象工厂:
其实就是一个接口,里面的方法有多个,比如一个方法是创建车的方法,一个是
创建飞机的方法;
类A 实现这个接口,重写这两个方法,那么就可以获得创建车和飞机的功能
工厂方法:
其实就是一个接口,里面只有一个方法,其他类实现这个接口,只能实现一个功能
● 1)工厂模式的意义:将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦。从而提高项目的扩展和维护性 ● 2)三种工厂模式:简单工厂模式(静态工厂方法也是简单工厂模式的一种)、工厂方法模式、抽象工厂模式 ● 3)设计模式的依赖抽象原则 ○ 创建对象实例时,不要直接 new 类,而是把这个 new 类的动作放在一个工厂的方法中并返回。有的书上说,变量不要直接持有具体类的引用 ○ 不要让类继承具体类,而是继承抽象类或者是实现 interface(接口) ○ 不要覆盖基类中已经实现的方法