创建型设计模式详解
立即解锁
发布时间: 2025-08-18 01:17:09 阅读量: 1 订阅数: 2 

### 创建型设计模式详解
在软件开发中,创建型设计模式是一组用于对象创建过程的设计模式,它们可以帮助我们更灵活、更高效地创建对象。本文将详细介绍抽象工厂模式、建造者模式、工厂方法模式和原型模式,并通过具体的代码示例来展示它们的应用。
#### 1. 抽象工厂模式
抽象工厂模式创建了一个接口,用于在不了解具体类的情况下创建多个对象。这是封装的一个强大体现,它允许我们在不改变源代码的情况下更改实现。
##### 1.1 用例
以房车制造为例,制造商需要决定房车的类型(A 型、B 型或 C 型)、风格(如露营车、巴士、卡车)、车架、发动机和厨房等细节。抽象工厂模式将用于为每种房车类型创建一组对象。
##### 1.2 UML 类图
实现该模式需要 5 个接口和 17 个类。
##### 1.3 代码实现
- **接口**:每个接口包含一个单一的访问器方法,返回一个字符串值。
```java
public interface Type {
public String getType();
}
public interface Style {
public String getStyle();
}
public interface Frame {
public String getFrame();
}
public interface Engine {
public String getEngine();
}
public interface Kitchen {
public String getKitchen();
}
```
- **抽象工厂类**:定义了四个抽象方法,对应后续的工厂类。
```java
public abstract class MotorHomeAbstractFactory {
public abstract Frame createFrame();
public abstract Style createStyle();
public abstract Engine createEngine();
public abstract Kitchen createKitchen();
}
```
- **具体类型类**:以 A 型房车为例,包含一个工厂类和四个实现类。
```java
public class TypeAFactory extends MotorHomeAbstractFactory {
public Frame createFrame() {
return new TypeAFrame();
}
public Style createStyle() {
return new TypeAStyle();
}
public Engine createEngine() {
return new TypeAEngine();
}
public Kitchen createKitchen() {
return new TypeAKitchen();
}
}
public class TypeAStyle implements Style {
public String getStyle() {
return "[Type A] Style:\t\tOff the Grid";
}
}
public class TypeAEngine implements Engine {
public String getEngine() {
return "[Type A] Engine:\tFord V10";
}
}
public class TypeAFrame implements Frame {
public String getFrame() {
return "[Type A] Frame:\t\tBus";
}
}
public class TypeAKitchen implements Kitchen {
public String getKitchen() {
return "[Type A] Kitchen:\tFull";
}
}
```
- **驱动类**:模拟用户输入,创建相应的工厂实例和房车组件,并输出结果。
```java
public class MotorHomeDriver {
public static void main(String[] args) {
// Step 1
// create abstract factory
MotorHomeAbstractFactory mhFactory = null;
// Step 2
// Create a factory instance
String nextMotorHome = "TypeA"; // simulated user input
if (nextMotorHome.equals("TypeA")) {
System.out.println("\nType A motor home selected");
mhFactory = new TypeAFactory();
} else if (nextMotorHome.equals("TypeB")) {
System.out.println("\nType B motor home selected");
mhFactory = new TypeBFactory();
} else if (nextMotorHome.equals("TypeC")) {
System.out.println("\nType C motor home selected");
mhFactory = new TypeCFactory();
} else {
System.out.println("Invalid motor home type entered.");
}
// Step 3
// Create motor home components
Style mhStyle = mhFactory.createStyle();
Frame mhFrame = mhFactory.createFrame();
Engine mhEngine = mhFactory.createEngine();
Kitchen mhKitchen = mhFactory.createKitchen();
// Step 4
// Provide Output
System.out.println("\nComponent list for " + nextMotorHome + " motor home");
System.out.println(mhStyle.getStyle());
System.out.println(mhFrame.getFrame());
System.out.println(mhEngine.getEngine());
System.out.println(mhKitchen.getKitchen());
}
}
```
#### 2. 建造者模式
建造者模式用于将对象的实例化和表示分离,允许在相同的实例化过程中实现不同的表示。该模式通常用于创建复杂对象,通过分步骤创建对象,我们可以根据不同的步骤构建不同的对象。
##### 2.1 用例
以咖啡烘焙机制造应用为例,该应用将创建两种不同的咖啡烘焙机模型:个人用和商用。共有八个组件,其中一些组件是两种模型共有的,一
0
0
复制全文
相关推荐










