简单工厂模式:一个抽象产品类,可以派生出多个具体产品类。一个具体工厂类,通过往此工厂的static方法中传入不同参数,产出不同的具体产品类实例。
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。
总的来说就是在工厂中new 具体实现的子类-产品的具体实现。而对于用户,不关心他是怎么生成的,只需要关注工厂即可。所有的new 对象都在工厂。后面的去new工厂的时候调用理解成多态。
同时注意产品或工厂的方法抽象出来。
直接是实体工厂去new的设计模式叫简单工厂
有个工厂抽象类,并每个产品都有一个工厂去生产new 对象 叫工厂方法
一个用于创建对象的接口,让子类决定实例化哪一个类。
不需要生产一个产品就弄一个实体工厂。如果有新的东西过来,同样定义一个抽象工厂(和下面的对应,这是工厂方法),然后用之前的工程去new 出对象抽象工厂放抽象产品的接口或抽象对象,new回去才能调到产品那边
工厂方法和抽象工厂区别就是,工厂方法只生成一个产品,抽象工厂生成多个。简单点就是Factcty的那个接口或者类。加一个还是多个抽象产品类或接口,加多个就是抽象方法。加一个就是工厂方法
1.定义:在基类中定义创建对象的一个接口,让子类决定实例化哪个类。工厂方法让一个类的实例化延迟到子类中进行。
2.分类:
(1)简单工厂,又称静态工厂方法模式。
(2)工厂方法,又称多态性工厂模式。
(3)抽象工厂,又称工具箱模式。
3.为什么要使用工厂模式
(1)解耦:把对象的创建和使用过程分开。
(2)降低代码重复:如果创建某个对象的过程都很复杂,需要一定的代码量,而且很多地方都要用到,那么就会有很多的重复代码。
(3)降低维护成本:由于创建过程都由工厂统一管理,所以发生业务逻辑变化,不需要找到所有需要创建对象B的地方去逐个修正,只需要在工厂里修改即可,降低维护成本。
二、简单工厂模式
1.适用场景:
(1)需要创建的对象较少
(2)客户端不关心对象的创建过程
2.简单工厂模式的角色分配:
(1)工厂(Factory)角色 :简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
(2)抽象产品(Product)角色 :简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
(3)具体产品(Concrete Product)角色:简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例
3.简单工厂实例
eg:创建一个可以绘制不同形状的绘图工具,可以绘制圆形,正方形,三角形,每个图形都会有一个draw()方法用于绘图。
(1)创建Shape接口
public interface Shape {
void draw();
}
(2)创建实现该接口的集体图形类
public class Circle implements Shape {
public Circle(){
System.out.println("Circle");
}
@Override
public void draw() {
System.out.println("Draw Circle");
}
}
public class Rectangle implements Shape {
public Rectangle(){
System.out.println("Rectangle");
}
@Override
public void draw() {
System.out.println("Draw Rectangle");
}
}
public class Square implements Shape {
public Square() {
System.out.println("Square");
}
@Override
public void draw() {
System.out.println("Draw Square");
}
}
(3)创建工厂类
public class ShapeFactory {
public static Shape createShape(String shapeType) { //注意是用的接口或者抽象类作为修饰对象!!!
if (shapeType ==