You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

原型模式是否违反里氏替换原则?其现代实用场景探讨

关于原型模式的几个疑问

我正在重新梳理设计模式,尤其是那些许久未用或从未使用过的模式,其中就包括Prototype模式(原型模式)。

多个资料指出,在Java中实现原型模式需要实现Cloneable接口并覆写clone()方法,但同时提到:

当对象内部包含不支持复制的对象或存在循环引用时,实现clone()会很困难。

我对此表示理解,例如存在一个GameCharacter父类,其下有十几个子类共享基础状态,但部分子类是‘不可复制’的(即不可克隆),部分则可以克隆。

但这是否违反了Liskov Substitution Principle(里氏替换原则)?该原则指出:

子类对象应当能够替换父类对象,且不影响程序的正确性。

在上述场景中,不可克隆的对象调用clone()时会抛出CloneNotSupportedException,这会影响程序正确性,是否确实违反了里氏替换原则?我是否忽略了什么?

目前我尚未处理过特别庞大的类,一直使用如下的构造函数来实现对象复制,且效果良好:

@Getter
@Setter
public class Tst {

    private String prop1;
    private Prop2 prop2;
    ......

    public Tst(Tst sourceObj) {
        this.setProp1(sourceObj.getProp1());
        this.setProp2(new Prop2(sourceObj.getProp2()));
        .....
    }

}

将此类构造函数放置在需要的类中,在需要的地方通过调用并强制类型转换来使用。

那么如今原型模式是否存在能带来显著收益的真实场景?还是多数情况下属于过度设计?


内容的提问来源于stack exchange,提问作者sashkins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:18:15