Java设计模式(二十二):原型设计模式

1. 应用场景

如果一个对象的创建总是由几种固定组件不同方式组合而成; 如果对象之间仅仅实例属性不同。将不同情况的对象缓存起来,直接克隆使用。也许这比采用传递参数重新 new 一个对象要来的快一些与工厂模式的区别:原型模式相当于”改进版的工厂模式”:对象实现了Clonnable()接口,加入了 java 反射机制,去掉了工厂模式繁多的子类

2.概念

使用原型实例指定要创建对象的类型,通过复制这个原型来创建新对象。

3. Class Diagram

在这里插入图片描述

(1)Prototype(抽象原型类):声明克隆方法的接口,是所有具体原型类的公共父类,它可是抽象类也可以是接口,甚至可以是具体实现类。

(2)ConcretePrototype(具体原型类):它实现抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象。

(3)Client(客户端):在客户类中,让一个原型对象克隆自身从而创建一个新的对象。

4. Implementation

public abstract class Prototype {
    abstract Prototype myClone();
}
public class ConcretePrototype extends Prototype {

    private String filed;

    public ConcretePrototype(String filed) {
        this.filed = filed;
    }

    @Override
    Prototype myClone() {
        return new ConcretePrototype(filed);
    }

    @Override
    public String toString() {
        return filed;
    }
}
public class Client {
    public static void main(String[] args) {
        Prototype prototype = new ConcretePrototype("abc");
        Prototype clone = prototype.myClone();
        System.out.println(clone.toString());
    }
}

运行结果:
abc

5. 优点和缺点

5.1 优点

  • 向客户隐藏制造新实例的复杂性
  • 提供让客户能够产生未知类型对象的选项
  • 在某些环境下,复制对象比创建对象更有效。

5.2 用途和缺点

  • 在一个复制的类层次中,当系统必须从其中的许多类型创建对象时,可以考虑原型。
  • 使用原型模式的缺点:对象的复制有时相当复杂。

6. JDK

猜你喜欢

转载自blog.csdn.net/qq_21125183/article/details/86065327
今日推荐