参考https://blog.csdn.net/qq_34337272/article/details/80472071
1. 简单工厂
很少用,先略过
2. 工厂方法模式
在工厂方法模式中针对不同的对象提供不同的工厂。也就是说 每个对象都有一个与之对应的工厂。通俗的讲就是一个工厂只生产一类产品。
2.1 工厂方法模式角色分配
1. 抽象工厂(Abstract Factory)角色: 任何工厂类都必须实现这个接口。
2. 具体工厂(Concrete Factory)角色: 这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建某一种产品对象。
3. 抽象产品(AbstractProduct)角色: 产品对象的共同父类或共同拥有的接口。
4. 具体产品(Concrete Product)角色: 这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。
2.2 工厂方法模式实例
创建一个可以绘制不同形状的绘图工具,可以绘制圆形,正方形,三角形,每个图形都会有一个draw()方法用于绘图.
2.2.1 创建Shape接口
public interface Shape {
void draw();
}
2.2.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");
}
}
2.2.3 工厂接口
public interface Factory {
public Shape getShape();
}
2.3.4 实现具体的工厂类:
圆形工厂类
public class CircleFactory implements Factory {
@Override
public Shape getShape() {
// TODO Auto-generated method stub
return new Circle();
}
}
长方形工厂类
public class RectangleFactory implements Factory{
@Override
public Shape getShape() {
// TODO Auto-generated method stub
return new Rectangle();
}
}
圆形工厂类
public class SquareFactory implements Factory{
@Override
public Shape getShape() {
// TODO Auto-generated method stub
return new Square();
}
}
2.3.5 使用
public class Test {
public static void main(String[] args) {
Factory circlefactory = new CircleFactory();
Shape circle = circlefactory.getShape();
circle.draw();
}
}
输出结果:
Circle
Draw Circle