享元模式实例
时间: 2023-07-05 09:25:21 浏览: 186
好的,下面是一个简单的享元模式实例。
假设我们有一个需求,需要在一个游戏中实现一些棋子的展示。每个棋子都包含一个颜色和一个形状属性。我们可以使用享元模式来减少内存消耗,避免每个棋子都创建一个新的对象。
首先,我们需要创建一个棋子工厂类,用于创建和管理棋子对象。工厂类中包含一个享元池,用于存储已经创建的棋子对象。
```java
public class ChessPieceFactory {
private static final Map<String, ChessPiece> pieces = new HashMap<>();
public static ChessPiece getChessPiece(String color, String shape) {
String key = color + shape;
ChessPiece piece = pieces.get(key);
if (piece == null) {
piece = new ChessPiece(color, shape);
pieces.put(key, piece);
}
return piece;
}
}
```
棋子类中只包含颜色和形状属性,不包含任何与棋子本身无关的状态。
```java
public class ChessPiece {
private String color;
private String shape;
public ChessPiece(String color, String shape) {
this.color = color;
this.shape = shape;
}
public String getColor() {
return color;
}
public String getShape() {
return shape;
}
public void display() {
System.out.println("ChessPiece: color=" + color + ", shape=" + shape);
}
}
```
最后,我们可以在游戏中使用棋子工厂类来创建和展示棋子:
```java
ChessPiece blackChess1 = ChessPieceFactory.getChessPiece("black", "pawn");
blackChess1.display(); // 输出:ChessPiece: color=black, shape=pawn
ChessPiece blackChess2 = ChessPieceFactory.getChessPiece("black", "pawn");
blackChess2.display(); // 输出:ChessPiece: color=black, shape=pawn
System.out.println(blackChess1 == blackChess2); // 输出:true
```
在上面的代码中,我们通过棋子工厂类创建了两个相同颜色和形状的棋子对象。由于享元模式的存在,这两个棋子对象实际上是同一个对象,所以最后输出的结果是true。这样就可以避免创建大量的重复对象,从而节省内存。
阅读全文