简单工厂是需要通过一些条件(switch判断),然后由工厂来返回具体的实例
工厂方法模式是直接创建出需要的实例,即通过继承父类的方式,来实现扩展,需要通过访问具体的工厂来获得实例,也就是需要记住所有的工厂。
考虑一个简单的图形绘制应用程序。你想要一个能够绘制不同形状(圆形、正方形、三角形)的功能。
我们可以使用工厂方法模式来实现这个场景。首先,定义一个抽象的 Shape
接口,然后创建具体的形状类实现这个接口。接着,定义一个抽象的 ShapeFactory
类来作为工厂,让具体的形状工厂类来创建对应的形状对象。
Shape 接口:
// Shape 接口
public interface Shape {
void draw();
}
具体形状实现类:
// Circle 类
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("绘制圆形");
}
}
// Square 类
public class Square implements Shape {
@Override
public void draw() {
System.out.println("绘制正方形");
}
}
// Triangle 类
public class Triangle implements Shape {
@Override
public void draw() {
System.out.println("绘制三角形");
}
}
抽象工厂类
// ShapeFactory 抽象类
public abstract class ShapeFactory {
public abstract Shape createShape();
}
具体工厂类
// CircleFactory 类
public class CircleFactory extends ShapeFactory {
@Override
public Shape createShape() {
return new Circle();
}
}
// SquareFactory 类
public class SquareFactory extends ShapeFactory {
@Override
public Shape createShape() {
return new Square();
}
}
// TriangleFactory 类
public class TriangleFactory extends ShapeFactory {
@Override
public Shape createShape() {
return new Triangle();
}
}
使用示例
public class Main {
public static void main(String[] args) {
ShapeFactory circleFactory = new CircleFactory();
Shape circle = circleFactory.createShape();
circle.draw();
ShapeFactory squareFactory = new SquareFactory();
Shape square = squareFactory.createShape();
square.draw();
ShapeFactory triangleFactory = new TriangleFactory();
Shape triangle = triangleFactory.createShape();
triangle.draw();
}
}