原型模式
原型模式
跨界王子 发表于7个月前
原型模式
  • 发表于 7个月前
  • 阅读 3
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

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

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
×
跨界王子
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: