天河区做网站公司,网站搜索引擎,长沙点梦网站建设公司怎么样,wordpress订阅邮箱什么是工厂模式#xff1f;
工厂模式是一种创建型设计模式#xff0c;它定义了一个用于创建对象的接口#xff0c;但由子类决定要实例化的类是哪一个。这样#xff0c;工厂方法模式让类的实例化延迟到子类。通过工厂方法模式#xff0c;我们可以在不修改现有代码的情况下…什么是工厂模式
工厂模式是一种创建型设计模式它定义了一个用于创建对象的接口但由子类决定要实例化的类是哪一个。这样工厂方法模式让类的实例化延迟到子类。通过工厂方法模式我们可以在不修改现有代码的情况下引入新的产品类从而实现更好的扩展性和可维护性。
示例创建不同类型的形状对象
让我们通过一个简单的示例来理解工厂模式。假设我们需要创建不同类型的形状对象比如圆形Circle、矩形Rectangle和正方形Square。
第一步定义形状接口
首先我们定义一个形状接口Shape所有具体的形状类都实现这个接口。
public interface Shape {void draw();
}第二步创建具体的形状类
接下来我们创建实现 Shape 接口的具体形状类例如 Circle、Rectangle 和 Square。
public class Circle implements Shape {Overridepublic void draw() {System.out.println(Drawing a Circle);}
}public class Rectangle implements Shape {Overridepublic void draw() {System.out.println(Drawing a Rectangle);}
}public class Square implements Shape {Overridepublic void draw() {System.out.println(Drawing a Square);}
}第三步创建抽象工厂类
我们创建一个抽象工厂类ShapeFactory定义一个工厂方法 createShape由子类实现具体的创建逻辑。
public abstract class ShapeFactory {public abstract Shape createShape();
}第四步创建具体工厂类
然后我们为每种形状创建对应的工厂类实现工厂方法 createShape。
public class CircleFactory extends ShapeFactory {Overridepublic Shape createShape() {return new Circle();}
}public class RectangleFactory extends ShapeFactory {Overridepublic Shape createShape() {return new Rectangle();}
}public class SquareFactory extends ShapeFactory {Overridepublic Shape createShape() {return new Square();}
}第五步使用工厂类创建形状对象
最后我们在客户端代码中使用具体的工厂类来创建不同的形状对象。
public class Client {public static void main(String[] args) {ShapeFactory circleFactory new CircleFactory();Shape shape1 circleFactory.createShape();shape1.draw();ShapeFactory rectangleFactory new RectangleFactory();Shape shape2 rectangleFactory.createShape();shape2.draw();ShapeFactory squareFactory new SquareFactory();Shape shape3 squareFactory.createShape();shape3.draw();}
}工厂模式的优点
解耦工厂模式将对象的创建和使用解耦客户端代码不需要知道具体类名只需与工厂类和接口/抽象类交互。扩展性添加新类型的产品类时只需增加相应的具体工厂类无需修改现有代码符合开闭原则Open/Closed Principle。灵活性通过工厂方法的重载或重写可以灵活地控制对象创建的过程。
工厂模式的缺点
类的数量增加每增加一种产品类都需要增加相应的具体工厂类导致类的数量增加。复杂性相对于简单工厂模式工厂模式的结构更复杂需要额外定义工厂类。
总结
工厂模式通过定义创建对象的接口将对象的实例化延迟到子类从而实现了解耦和扩展性。尽管其结构相对复杂但在需要灵活创建对象且可能频繁变更的场景中工厂模式是一种非常有用的设计模式。希望通过这个示例你能更好地理解和应用工厂模式让你的代码更加优雅和高效。