设计模式学习_工厂方法模式
工厂方法设计模式 Factory Pattern
定义以及抽象层面
- 工厂方法定义了一种更好地创造对象的方式。但是它让工厂子类来决定怎么创造以及创造哪一个对象。也就是说,工厂模式将创造对象的过程延迟给子类来进行。
它以这两种东西组成:
1. 我们想要创造的对象。
2.我们用来创造这些对象的工厂。
抽象层面的图所示:
# 我们可以看到:
1. 左边代表的是各个我们需要创建的对象。
2. 右边代表的是我们用什么(工厂)来创建,当然了,根据什么规则来创建这些对象,我们也可以写在工厂中。
具体案例层面以及代码实现
# 现在,我们用可以实现的代码形式来说明:
重要的图如下:
- 也就是说,业务场景如下:我们需要创造一个可以画出形状的图形:可以是画出长方形,正方形或者圆形。我们利用工厂类来有逻辑地创造这些类。
接口 形状 Shape.java
1
2
3
4
5package com.company.inter;
public interface Shape {
void draw();
}具体的实现子类.java
1
2
3
4
5
6
7
8
9
10package com.company.impl;
import com.company.inter.Shape;
public class Circle implements Shape {
public void draw() {
System.out.println("画出来的是圆形图案...");
}
}
1 | package com.company.impl; |
1 | package com.company.impl; |
创造指定对象的工厂.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20package com.company.factory;
import com.company.impl.Circle;
import com.company.impl.Rectangle;
import com.company.impl.Square;
import com.company.inter.Shape;
public class ShapeFactory {
public Shape getShape(String specificShapeName) {
//定义如何生成对象的逻辑
if (specificShapeName.equals("Rectangle")) {
return new Rectangle();
} else if (specificShapeName.equals("Square")) {
return new Square();
}else if (specificShapeName.equals("Circle")) {
return new Circle();
}
return null;
}
}测试的主函数Main.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18package com.company;
import com.company.factory.ShapeFactory;
import com.company.inter.Shape;
public class Main {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory();
//通过指定不同的名字 来创造不同的对象(依照具体的业务场景来定义不同的对象创建规则)
Shape s1 = shapeFactory.getShape("Circle");
s1.draw();
Shape s2 = shapeFactory.getShape("Square");
s2.draw();
}
}