文档章节

原型模式

跨界王子
 跨界王子
发布于 2017/05/19 14:20
字数 236
阅读 4
收藏 0

原型模式就是用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。

package prototype;

public class Employee implements Cloneable {
    private String name;
    private Company company;

    public Employee(String name, String company) {
        this.name = name;
        this.company = new Company(company);
    }

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

    public void setCompany(String company) {
        this.company = new Company(company);
    }

    /**
     * 工作
     */
    public void work() {
        System.out.println(name + " works at " + this.company.name);
    }

    @Override
    protected Employee clone() throws CloneNotSupportedException {
        return (Employee) super.clone();
    }

    //公司
    class Company {
        private String name;

        public Company(String name) {
            this.name = name;
        }
    }
}
package prototype;

public class PrototypeClient {
    public static void main(String[] args) throws CloneNotSupportedException {
        String name = "sam";
        String company = "apple";
        Employee sam = new Employee(name, company);
        sam.work();

        String otherName = "james";
        String otherNcompany = "google";
        Employee james = sam.clone();
        james.setName(otherName);
        james.setCompany(otherNcompany);
        james.work();
    }
}

如果对象中有其他对象的引用,使用浅拷贝无法完成对象的整个克隆,因为如果使用浅拷贝,只是对象的引用得到的拷贝,而两个引用是指向了同一个对象,对其中一个修改还是会影响到另外一个对象。

© 著作权归作者所有

共有 人打赏支持
跨界王子
粉丝 0
博文 2
码字总数 530
作品 0
沈阳

暂无文章

如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
3
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
3
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
今天
2
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
今天
3
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部