白话-23种设计模式2-原型模式

举报
object 发表于 2022/06/28 10:54:39 2022/06/28
1.2k+ 0 1
【摘要】 一、白话  类似于生化危机的克隆人,火影鸣人的多重分身术,就是以某一个“本体”为模板,造出很多个相同新的“本体复制”。二、定义   这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。 当直接创建对象的代价比较大时,则采用这种模式。三、原型模式  /** * 鸣人模板原型 * ==需要实现Cloneable,否则调用clone()会报错== */public class MingRe...

一、白话

  类似于生化危机的克隆人,火影鸣人的多重分身术,就是以某一个“本体”为模板,造出很多个相同新的“本体复制”。

二、定义

   这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。 当直接创建对象的代价比较大时,则采用这种模式

三、原型模式

 

/**
 * 鸣人模板原型
 * ==需要实现Cloneable,否则调用clone()会报错==
 */
public class MingRen implements Cloneable {
    private String name;
    private String age;
    private String tricks;

    public MingRen(String name, String age, String tricks) {
        this.name = name;
        this.age = age;
        this.tricks = tricks;
    }

    public Object clone() {
        try {
            // 浅拷贝 属性指向对一对象
            super.clone();
            // 深拷贝 属性指向新对象
            return new MingRen(new String(this.name), new String(this.age), new String(this.tricks));
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
            return null;
        }
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getTricks() {
        return tricks;
    }

    public void setTricks(String tricks) {
        this.tricks = tricks;
    }
}
public class PrototypeApplication {

    public static void main(String[] args) {
        MingRen mingRen = new MingRen("鸣人", "18", "螺旋丸");
        MingRen clone = (MingRen) mingRen.clone();
        System.out.println(mingRen.getAge() == clone.getAge());
    }

}

四、总结

  优点:创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程。

  缺点:clone方法,需要修改源代码,违背开闭原则。同时克隆时,分为浅拷贝和深拷贝,深拷贝需要编写较为复杂的代码。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。