原型模式

原型模式

原型模式是一种创建型设计模式,其核心思想是利用已有的原型对象来创建新对象。[0]原型模式是一种创建型设计模式,它允许一个对象再创建另外一个可定制的对象,而无需了解具体的创建过程。这种模式的工作原理是通过将一个原型对象传递给另一个对象,后者可以通过请求原型对象拷贝自身的方式来实现对象的创建。[1]

原型模式是一种创建型设计模式,其核心思想是利用已有的原型对象来创建新对象。[1]

定义

原型模式是一种创建型设计模式,它允许一个对象再创建另外一个可定制的对象,而无需了解具体的创建过程。这种模式的工作原理是通过将一个原型对象传递给另一个对象,后者可以通过请求原型对象拷贝自身的方式来实现对象的创建。[2]

作用

原型模式主要用于解决复杂对象的创建工作,特别是在需求变化频繁的情况下,这些对象往往具有稳定的接口。

实现

在Java中,原型模式的实现非常简单,因为它提供了clone()方法用于对象的克隆。例如,对于一个勺子对象,可以轻松地调用Prototype模式来进行克隆操作。此外,还可以结合工厂模式来创建AbstractSpoon实例。在Java中,原型模式几乎与设计模式融为一体,许多模式都体现了这一点,比如Iterator遍历模式。

结构

客户端角色(Client):负责向原型管理器提出创建对象的请求。

抽象原型角色(Prototype):由接口或抽象类实现,定义所有具体原型类所需的方法。在Java中,通常实现ICloneable接口。

具体原型角色(Concrete Prototype):实际被复制的对象,需要实现抽象原型角色定义的接口。

原型管理器角色(Prototype Manager):负责创建并维护具体原型类的对象集合。[3]

示例代码

```java

public interface Spoon extends Cloneable {

public Spoon clone();

}

public class WoodenSpoon implements Spoon {

private String name;

public WoodenSpoon(String name) {

this.name = name;

}

@Override

public WoodenSpoon clone() {

return (WoodenSpoon) super.clone();

}

}

```

```java

public class SpoonFactory {

private Map<String, Spoon> spoons = new HashMap<>();

public Spoon createSpoon(String type) {

if (!spoons.containsKey(type)) {

throw new IllegalArgumentException("Unknown spoon type: " + type);

}

return spoons.get(type).clone();

}

public void registerSpoon(Spoon spoon) {

spoons.put(spoon.getName(), spoon);

}

}

```

```java

public static void main(String[] args) {

SpoonFactory factory = new SpoonFactory();

factory.registerSpoon(new WoodenSpoon("wooden"));

Spoon woodenSpoon = factory.createSpoon("wooden");

Spoon anotherWoodenSpoon = factory.createSpoon("wooden");

System.out.println(woodenSpoon == anotherWoodenSpoon); // false

}

```

参考资料 3

  1. 原型模式 — 菜鸟教程
  2. 设计模式—原型模式 — CSDN博客
  3. 原型 模式 — CSDN博客
广告位:底部(ad-bottom)—— 请到中台「公共区块」编辑此内容