政务网站建设要求,网站上如何放入地图,新浪微指数,免费推广网站2023一、什么是工厂方法模式#xff1f;
1.定义 在软件开发中#xff0c;设计模式 是解决常见软件设计问题的最佳实践。而 工厂方法模式#xff08;Factory Method Pattern#xff09; 作为创建型设计模式之一#xff0c;常常被用来解决对象创建问题。它通过将对象的创建交给…一、什么是工厂方法模式
1.定义 在软件开发中设计模式 是解决常见软件设计问题的最佳实践。而 工厂方法模式Factory Method Pattern 作为创建型设计模式之一常常被用来解决对象创建问题。它通过将对象的创建交给子类来解耦代码使得代码更具灵活性与扩展性。 工厂方法模式定义了一个用于创建对象的接口让子类决定实例化哪一个类。工厂方法让一个类的实例化推迟到其子类。这种模式常用于类的实例化逻辑非常复杂或者需要提供多种类型的实例而又不希望让客户端代码直接接触到具体类的实现时。
2.工厂方法模式的结构
Product产品接口声明所有具体产品类需要实现的接口。ConcreteProduct具体产品类实现 Product 接口的具体类。Creator创建者类声明工厂方法通常是抽象类或接口用于创建 Product 对象。ConcreteCreator具体创建者类实现 Creator 类返回具体的 ConcreteProduct 对象。
3.工厂方法模式的优缺点
优点
解耦工厂方法模式将产品的创建和使用分离避免了客户端程序与具体产品类的紧密耦合。易扩展新增产品类时只需增加新的具体工厂类客户端不需要修改符合开闭原则。封装复杂性创建对象的过程可以被封装在工厂中客户端无需关心创建过程的细节。
缺点
增加代码量每增加一个具体产品都需要相应的具体工厂类这会导致类的数量增多。客户端调用不方便如果产品种类很多工厂类会增多客户端代码可能会变得复杂。 二、图形工厂示例 为了更好地理解工厂方法模式我们通过一个简单的图形绘制的例子来练习实现工厂方法模式。
1. 需求分析 我们需要设计一个图形绘制程序支持绘制多种类型的图形如圆形、三角形等。每种图形的创建逻辑不同为了将图形的创建过程与客户端代码解耦我们决定使用工厂方法模式。
2. 设计类结构
Shape接口声明所有图形的绘制方法。具体图形类如 Circle、Triangle 等实现 Shape 接口定义图形的绘制行为。抽象工厂类 ShapeFactory声明工厂方法 createShape()用于创建图形。具体工厂类如 CircleFactory 和 TriangleFactory实现工厂方法并返回对应的图形对象。
3. 实现代码 以下是我们实现的代码
// 图形接口
public interface Shape {void draw();
}// 圆形类
public class Circle implements Shape {Overridepublic void draw() {System.out.println(画了一个圆);}
}// 三角形类
public class Triangle implements Shape {Overridepublic void draw() {System.out.println(画了一个三角形);}
}// 抽象工厂类
public abstract class ShapeFactory {public abstract Shape createShape(); // 工厂方法
}// 圆形工厂
public class CircleFactory extends ShapeFactory {Overridepublic Shape createShape() {return new Circle();}
}// 三角形工厂
public class TriangleFactory extends ShapeFactory {Overridepublic Shape createShape() {return new Triangle();}
}// 测试类
public class TestMethodFactory {public static void main(String[] args) {ShapeFactory circleFactory new CircleFactory();Shape circle circleFactory.createShape();circle.draw(); // 绘制圆形ShapeFactory triangleFactory new TriangleFactory();Shape triangle triangleFactory.createShape();triangle.draw(); // 绘制三角形}
}4. 运行结果 当我们运行 TestMethodFactory 类时会得到如下输出 画了一个圆 画了一个三角形 5. 分析
ShapeFactory 类作为抽象工厂类声明了 createShape() 方法具体的工厂类 CircleFactory 和 TriangleFactory 实现了这个方法分别返回了不同的图形对象。TestMethodFactory 类作为客户端使用了不同的工厂来创建不同的图形对象而无需关注图形的具体创建过程。
6. 总结 通过本次练习我们深入了解了工厂方法模式的应用。工厂方法模式通过将对象创建逻辑交给子类来实现使得代码更加解耦易于扩展。如果以后需要增加新的图形类型只需添加新的工厂类和对应的图形类而不需要修改客户端代码。这种设计模式符合 开闭原则能够使代码在面对变化时更加灵活。 三、总结与反思
工厂方法模式帮助我们解决了创建对象的问题将对象的创建交给工厂方法避免了客户端直接依赖于具体的实现类。它使得我们能够灵活地扩展系统功能如需要增加新的图形类型只需添加新的工厂类。通过工厂方法模式客户端无需知道具体的创建逻辑只关心工厂返回的产品对象从而简化了代码的使用和维护。
如果你对工厂方法模式有任何疑问或想法欢迎在评论区留言交流 希望这篇博客能帮助你更好地理解工厂方法模式。如果你有任何问题或者想要更多的设计模式实例请随时向我提问