设计模式-原型模式示例

来源: 腾讯云 时间:2023-05-05 08:13:43


(资料图片)

演示原型模式的实现方法:

// 原型接口public interface Prototype {    Prototype clone();}// 具体的学生类,实现原型接口并重写复制方法public class Student implements Prototype {    private String name;    private int age;        public Student(String name, int age) {        this.name = name;        this.age = age;    }        public String getName() {        return name;    }        public void setName(String name) {        this.name = name;    }        public int getAge() {        return age;    }        public void setAge(int age) {        this.age = age;    }        // 实现 clone() 方法,返回一个新的学生对象并复制原有对象的属性    @Override    public Prototype clone() {        return new Student(name, age);    }}// 客户端代码public class Client {    public static void main(String[] args) {        // 创建原型对象        Student stu1 = new Student("张三", 20);                // 克隆新对象并修改属性        Student stu2 = (Student) stu1.clone();        stu2.setName("李四");        stu2.setAge(21);                // 打印结果        System.out.println("stu1: " + stu1.getName() + ", " + stu1.getAge());        System.out.println("stu2: " + stu2.getName() + ", " + stu2.getAge());    }}

在这个示例代码中,我们定义了一个原型接口 Prototype 和一个具体的学生类 Student,该类实现了原型接口并重写了 clone() 方法。在客户端代码中,我们创建了一个原型对象 stu1,并通过克隆原型对象来生成一个新的学生对象 stu2,然后修改 stu2 对象的属性并打印结果。由于 stu1 和 stu2 对象是互相独立的,因此修改 stu2 的属性不会影响 stu1 对象的属性。

需要注意的是,在实现原型模式时,要确保克隆对象的深浅复制问题。在示例代码中,我们只需要对基本类型的成员变量进行复制,因此可以使用浅复制来实现 clone() 方法。但如果 Student 类中包含了非基本类型的成员变量,例如一个引用类型的属性 Address,那么就需要对这个属性进行深度克隆,否则复制出来的新对象和原有对象会共享这个引用类型的属性,可能会引发潜在的问题。

因此,在实现原型模式时,需要根据具体的场景选择适当的复制方法来确保克隆对象的正确性。如果对象比较简单,只包含基本类型的成员变量,可以使用浅复制来实现 clone() 方法;如果对象比较复杂,包含了多个引用类型的成员变量,就需要使用深复制来确保新对象和原有对象的属性是完全独立的。

X 关闭

热门推荐

什么是HPA

2023-05-05   腾讯云

设计模式-原型模式示例

2023-05-05   腾讯云

中国电信:夯实国云底座,加快建设数字中国

2023-05-05   中国产业经济信息网

天天速递!全球首台可变径斜井掘进机下线

2023-05-05   中国产业经济信息网

设计模式-原型模式示例

2023-05-05   腾讯云

简讯:休闲农业促增收

2023-05-05   金台资讯

设计模式-原型模式示例

2023-05-05   腾讯云

什么是HPA

2023-05-05   腾讯云

唱响乡村“青歌会”

2023-05-05   北京青年报官网

矿物态铁

2023-05-05   互联网

Taint和Toleration

2023-05-04   腾讯云

Taint命令入门

2023-05-04   腾讯云

使用SubPath 观察

2023-05-04   腾讯云

当前最新:Taint和Toleration

2023-05-04   腾讯云

使用SubPath 天天时讯

2023-05-04   腾讯云

Volumes示例 世界热点评

2023-05-04   腾讯云

天天视点!白酒解酒的最快方法?

2023-05-04   南方养生网

货车司机 请注意,右转必停!

2023-05-04   1039调查团

Volumes示例 环球热议

2023-05-04   腾讯云

设计模式-适配器模式示例

2023-05-04   腾讯云

InitContainer

2023-05-04   腾讯云

世界视讯!Taint命令入门

2023-05-04   腾讯云

北京大学举行建校125周年纪念大会

2023-05-04   中国新闻网

设计模式-适配器模式 视讯

2023-05-04   腾讯云

PHP-web框架Laravel-队列(三)

2023-05-04   腾讯云

焦点快播:清肺养肺第一菜?

2023-05-04   南方养生网

PHP-web框架Laravel-缓存(一)

2023-05-04   腾讯云

360uc浏览器(360lui浏览器)

2023-05-04   互联网

Taint命令入门-速看

2023-05-04   腾讯云

设计模式-原型模式(二)

2023-05-04   腾讯云

【环球热闻】InitContainer

2023-05-04   腾讯云

环球热点!Secret热更新

2023-05-04   腾讯云

五一假期北京接待游客900余万人次

2023-05-04   北京青年报官网

每日动态!ingress-Traefik

2023-05-04   腾讯云

Taint命令入门

2023-05-04   腾讯云

设计模式-原型模式(一)

2023-05-04   腾讯云

设计模式-抽象工厂模式

2023-05-04   腾讯云

焦点热议:枪王之王

2023-05-04   中国青年报

精彩看点:Taint和Toleration

2023-05-04   腾讯云

InitContainer

2023-05-04   腾讯云

设计模式-原型模式(二)

2023-05-04   腾讯云

为什么要用临时容器

2023-05-04   腾讯云

女人我最大2017_女人我最大官方网站

2023-05-04   青年汽车云小站

热门:kubernetes-Affinity示例

2023-05-04   腾讯云

设计模式-原型模式(一)

2023-05-04   腾讯云

Taint命令示例

2023-05-04   腾讯云

卧龙苍天陨落神兽召唤流套路分享

2023-05-04   游戏资讯网

ingress-Traefik_世界热消息

2023-05-04   腾讯云

设计模式-原型模式(二)

2023-05-04   腾讯云

Taint命令示例-热点评

2023-05-04   腾讯云

InitContainer 微速讯

2023-05-04   腾讯云

Copyright   2015-2022 中国行业信息网版权所有  备案号:   联系邮箱:29 59 11 57 8@qq.com