品牌商城网站开发,网站建设主要研究内容,重庆市建设工程信息服务平台,做个购物商城网站多长时间引言
1. 工厂模式的定义
2. 工厂模式的类型
2.1 简单工厂模式
2.1.1 结构
2.1.2 示例代码
2.2 工厂方法模式
2.2.1 结构
2.2.2 示例代码
2.3 抽象工厂模式
2.3.1 结构
2.3.2 示例代码
3. 工厂模式的优点
4. 工厂模式的缺点
5. 实际应用场景
6. 总结 引言 工厂模…引言
1. 工厂模式的定义
2. 工厂模式的类型
2.1 简单工厂模式
2.1.1 结构
2.1.2 示例代码
2.2 工厂方法模式
2.2.1 结构
2.2.2 示例代码
2.3 抽象工厂模式
2.3.1 结构
2.3.2 示例代码
3. 工厂模式的优点
4. 工厂模式的缺点
5. 实际应用场景
6. 总结 引言 工厂模式Factory Pattern是创建型设计模式之一它提供了一种创建对象的最佳方式。在工厂模式中我们不再直接通过 new 关键字来实例化对象而是通过调用工厂方法来获取对象。这种方式将对象的创建和使用分离提高了代码的灵活性和可维护性。 1. 工厂模式的定义
工厂模式是一种创建型设计模式它提供了一个创建对象的接口但允许子类决定实例化哪一个类。工厂方法让类的实例化推迟到子类。
2. 工厂模式的类型
工厂模式主要有以下几种类型
简单工厂模式Simple Factory工厂方法模式Factory Method抽象工厂模式Abstract Factory
2.1 简单工厂模式
简单工厂模式不是严格意义上的设计模式因为它并不符合开闭原则。但它提供了一个简单的对象创建机制。
2.1.1 结构
产品接口Product Interface定义产品的公共接口。具体产品Concrete Product实现产品接口的具体类。工厂类Factory Class包含创建产品的方法根据传入的参数返回相应的产品实例。
2.1.2 示例代码
// 产品接口
interface Shape {void draw();
}// 具体产品
class Circle implements Shape {Overridepublic void draw() {System.out.println(Drawing a Circle);}
}class Rectangle implements Shape {Overridepublic void draw() {System.out.println(Drawing a Rectangle);}
}// 工厂类
class ShapeFactory {// 根据传入的形状类型创建相应的形状对象public static Shape getShape(String shapeType) {if (shapeType null) {return null;}if (shapeType.equalsIgnoreCase(CIRCLE)) {return new Circle();} else if (shapeType.equalsIgnoreCase(RECTANGLE)) {return new Rectangle();}return null;}
}// 客户端代码
public class SimpleFactoryDemo {public static void main(String[] args) {Shape circle ShapeFactory.getShape(CIRCLE);circle.draw();Shape rectangle ShapeFactory.getShape(RECTANGLE);rectangle.draw();}
}
2.2 工厂方法模式
工厂方法模式定义了一个用于创建对象的接口但由子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
2.2.1 结构
产品接口Product Interface定义产品的公共接口。具体产品Concrete Product实现产品接口的具体类。工厂接口Factory Interface声明创建产品的方法。具体工厂Concrete Factory实现工厂接口创建具体的产品实例。
2.2.2 示例代码
// 产品接口
interface Shape {void draw();
}// 具体产品
class Circle implements Shape {Overridepublic void draw() {System.out.println(Drawing a Circle);}
}class Rectangle implements Shape {Overridepublic void draw() {System.out.println(Drawing a Rectangle);}
}// 工厂接口
interface ShapeFactory {Shape createShape();
}// 具体工厂
class CircleFactory implements ShapeFactory {Overridepublic Shape createShape() {return new Circle();}
}class RectangleFactory implements ShapeFactory {Overridepublic Shape createShape() {return new Rectangle();}
}// 客户端代码
public class FactoryMethodDemo {public static void main(String[] args) {ShapeFactory circleFactory new CircleFactory();Shape circle circleFactory.createShape();circle.draw();ShapeFactory rectangleFactory new RectangleFactory();Shape rectangle rectangleFactory.createShape();rectangle.draw();}
}
2.3 抽象工厂模式
抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口而无需指定它们具体的类。
2.3.1 结构
抽象产品接口Abstract Product Interface定义一组产品接口。具体产品Concrete Product实现抽象产品接口的具体类。抽象工厂接口Abstract Factory Interface声明创建抽象产品的方法。具体工厂Concrete Factory实现抽象工厂接口创建具体的产品实例。
2.3.2 示例代码
// 抽象产品接口
interface Shape {void draw();
}interface Color {void fill();
}// 具体产品
class Circle implements Shape {Overridepublic void draw() {System.out.println(Drawing a Circle);}
}class Rectangle implements Shape {Overridepublic void draw() {System.out.println(Drawing a Rectangle);}
}class Red implements Color {Overridepublic void fill() {System.out.println(Filling with Red color);}
}class Green implements Color {Overridepublic void fill() {System.out.println(Filling with Green color);}
}// 抽象工厂接口
interface AbstractFactory {Shape createShape(String shapeType);Color createColor(String colorType);
}// 具体工厂
class ShapeFactory implements AbstractFactory {Overridepublic Shape createShape(String shapeType) {if (shapeType.equalsIgnoreCase(CIRCLE)) {return new Circle();} else if (shapeType.equalsIgnoreCase(RECTANGLE)) {return new Rectangle();}return null;}Overridepublic Color createColor(String colorType) {return null;}
}class ColorFactory implements AbstractFactory {Overridepublic Shape createShape(String shapeType) {return null;}Overridepublic Color createColor(String colorType) {if (colorType.equalsIgnoreCase(RED)) {return new Red();} else if (colorType.equalsIgnoreCase(GREEN)) {return new Green();}return null;}
}// 客户端代码
public class AbstractFactoryDemo {public static void main(String[] args) {AbstractFactory shapeFactory new ShapeFactory();Shape circle shapeFactory.createShape(CIRCLE);circle.draw();AbstractFactory colorFactory new ColorFactory();Color red colorFactory.createColor(RED);red.fill();}
}
3. 工厂模式的优点
封装性对象的创建过程被封装在工厂方法中客户端不需要知道具体的创建细节。解耦客户端与具体的产品类解耦可以方便地更换具体的产品类。扩展性添加新的产品类时只需扩展工厂类即可不需要修改现有的代码。一致性所有对象都通过工厂方法创建确保了创建的一致性和完整性。
4. 工厂模式的缺点
增加复杂度引入了额外的工厂类增加了系统的复杂度。单一职责原则工厂类可能变得非常庞大违反了单一职责原则。
5. 实际应用场景
数据库访问层根据不同的数据库类型如 MySQL、Oracle创建相应的数据库连接对象。日志系统根据不同的日志级别如 DEBUG、INFO、ERROR创建相应的日志记录器。图形界面根据不同的平台如 Windows、Linux创建相应的 UI 控件。
6. 总结 工厂模式是一种非常实用的设计模式它可以提高代码的可维护性和扩展性。通过将对象的创建过程封装在工厂类中客户端可以更加灵活地使用对象而不必关心具体的创建细节。