【设计模式】23种设计模式——工厂模式(原理讲解+应用场景介绍+案例介绍+Java代码实现)
发布人:shili8
发布时间:2024-11-19 00:34
阅读次数:0
**工厂模式**
工厂模式是一种创建型设计模式,用于定义对象的创建过程。它使得我们能够隔离对象的创建逻辑,从而提高系统的灵活性和扩展性。
### 原理讲解工厂模式的主要目的是将对象的创建过程从客户端代码中分离出来,使得客户端代码不需要直接涉及到对象的创建过程。这种设计方式有助于减少代码的耦合度,提高系统的可维护性和扩展性。
在工厂模式中,我们定义一个工厂类,它负责创建特定类型的对象。这个工厂类通常包含一个或多个工厂方法,这些方法用于创建不同类型的对象。
### 应用场景介绍工厂模式适用于以下场景:
* 需要创建多种类型的对象,但这些对象之间有共享的属性和行为。
* 需要隔离对象的创建逻辑,从而提高系统的灵活性和扩展性。
### 案例介绍假设我们正在开发一个图形绘制系统,需要绘制不同类型的图形,如圆、矩形、线条等。我们可以使用工厂模式来定义一个工厂类,负责创建这些图形对象。
java// 图形接口public interface Shape { void draw(); } // 圆类public class Circle implements Shape { private int radius; public Circle(int radius) { this.radius = radius; } @Override public void draw() { System.out.println("绘制圆"); } } // 矩形类public class Rectangle implements Shape { private int width; private int height; public Rectangle(int width, int height) { this.width = width; this.height = height; } @Override public void draw() { System.out.println("绘制矩形"); } } // 线条类public class Line implements Shape { private int x1; private int y1; private int x2; private int y2; public Line(int x1, int y1, int x2, int y2) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; } @Override public void draw() { System.out.println("绘制线条"); } } // 工厂类public class ShapeFactory { public static Shape createShape(String shapeType) { if (shapeType.equals("circle")) { return new Circle(10); } else if (shapeType.equals("rectangle")) { return new Rectangle(20,30); } else if (shapeType.equals("line")) { return new Line(40,50,60,70); } return null; } } // 客户端代码public class Main { public static void main(String[] args) { Shape shape = ShapeFactory.createShape("circle"); shape.draw(); shape = ShapeFactory.createShape("rectangle"); shape.draw(); shape = ShapeFactory.createShape("line"); shape.draw(); } }
在这个案例中,我们定义了一个工厂类 `ShapeFactory`,它负责创建不同类型的图形对象。客户端代码通过调用工厂方法来获取所需的图形对象。
### Java代码实现上述案例中的 Java代码已经实现了工厂模式的基本原理和应用场景。
但是,如果我们需要扩展这个系统,例如添加新的图形类型,我们可以在工厂类中增加新的工厂方法,从而提高系统的灵活性和扩展性。
java// 扩展工厂类public class ShapeFactory { public static Shape createShape(String shapeType) { if (shapeType.equals("circle")) { return new Circle(10); } else if (shapeType.equals("rectangle")) { return new Rectangle(20,30); } else if (shapeType.equals("line")) { return new Line(40,50,60,70); } else if (shapeType.equals("polygon")) { return new Polygon(80,90,100,110); } return null; } // 新增工厂方法 public static Shape createPolygon(int x1, int y1, int x2, int y2) { return new Polygon(x1, y1, x2, y2); } }
在这个扩展的案例中,我们增加了一个新的工厂方法 `createPolygon`,用于创建多边形图形对象。客户端代码可以通过调用这个新工厂方法来获取所需的多边形图形对象。
java// 新增多边形类public class Polygon implements Shape { private int x1; private int y1; private int x2; private int y2; public Polygon(int x1, int y1, int x2, int y2) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; } @Override public void draw() { System.out.println("绘制多边形"); } }
在这个扩展的案例中,我们定义了一个新的多边形类 `Polygon`,它实现了图形接口 `Shape`。客户端代码可以通过调用工厂方法来获取所需的多边形图形对象。
java// 客户端代码public class Main { public static void main(String[] args) { Shape shape = ShapeFactory.createShape("circle"); shape.draw(); shape = ShapeFactory.createShape("rectangle"); shape.draw(); shape = ShapeFactory.createShape("line"); shape.draw(); shape = ShapeFactory.createPolygon(80,90,100,110); shape.draw(); } }
在这个扩展的案例中,我们可以通过调用工厂方法来获取所需的多边形图形对象。
### 总结工厂模式是一种创建型设计模式,用于定义对象的创建过程。它使得我们能够隔离对象的创建逻辑,从而提高系统的灵活性和扩展性。在这个案例中,我们使用工厂模式来定义一个工厂类,负责创建不同类型的图形对象。客户端代码可以通过调用工厂方法来获取所需的图形对象。
在扩展的案例中,我们增加了一个新的工厂方法 `createPolygon`,用于创建多边形图形对象。客户端代码可以通过调用这个新工厂方法来获取所需的多边形图形对象。
工厂模式有助于减少代码的耦合度,提高系统的可维护性和扩展性。