第九章 原型模式

大概是java版本升级了,clone方法不严格写好像也没什么问题。

/**
 * Created by hero on 16-4-2.
 */
public class Company implements Cloneable {
    private String name;

    public String getName() {
        return name;
    }

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

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

    public Company clone() {
        Company company = null;
        try {
            company = (Company) super.clone();
        } catch (CloneNotSupportedException e) {
        }
        return company;
    }
}
/**
 * Created by hero on 16-4-2.
 */
public class BusinessCard implements Cloneable {
    private String name;
    private Company company;

    public String getName() {
        return name;
    }

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

    public Company getCompany() {
        return company;
    }

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

    public BusinessCard clone() {
        BusinessCard card = null;
        try {
            card = (BusinessCard) super.clone();
            if(company!= null){
                card.company = company.clone();
            }
        } catch (CloneNotSupportedException e) {
        } //won‘t happen
        return card;
    }
}
public class Main {

    public static void main(String[] args) {
        BusinessCard card = new BusinessCard();
        card.setName("张无忌");
        card.setCompany(new Company("武当"));
        BusinessCard card1 = card.clone();
        card1.setCompany(new Company("少林"));
        System.out.println(card.getName() + ", " + card.getCompany().getName());
        System.out.println(card1.getName() + ", " + card1.getCompany().getName());
    }
}
时间: 2024-11-05 12:06:38

第九章 原型模式的相关文章

大话设计模式第九章---原型模式PHP实现

首先,PHP对象clone参考资料: http://php.net/manual/en/language.oop5.cloning.php#object.clone Object Cloning¶ Creating a copy of an object with fully replicated properties is not always the wanted behavior. A good example of the need for copy constructors, is i

设计模式之第9章-原型模式(Java实现)

设计模式之第9章-原型模式(Java实现) “快到春节了,终于快放假了,天天上班好累的说.”“确实啊,最近加班比较严重,项目快到交付了啊.”“话说一到过节,就收到铺天盖地的短信轰炸,你说发短信就发吧,大多数还是一样的,群发.”“就是就是,上次我收到一个,竟然连名字都给弄错了,简直没法说啊,要不然就不发得了,干嘛弄得那么麻烦.”“所以说,才会有群发的短信我不回这个段子嘛.”“对了,今天你不是就要讲那个原型模式什么的,就是类似于群发的是吧.”“嘿嘿,天机不可泄露.”(PS:还天机不可泄露,学会吊起胃

第九话-原型模式

有钱啦,有钱啦,是买MX4PRO还是6?知道我是怎么有那么多money的么?请学习原型模式. 一.什么是原型模式? 原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 注:类是抽象的,对象是具体的. 换句话说:你有一份简历(具体的),你想要10份,那就以此份为原件复印10份(具体的),OK. 二.为什么要用原型模式? 1.解决复杂类变动的困扰问题: 2.快速实例对象. 三.例子(简历) Main.java public class Main { public static

第 9 章 原型模式

原型模式:用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节.   .Net在System命名空间中提供了ICloneable接口,其中就是唯一的一个方法Clone(),这样你就只需要实现这个接口就完成原型模式了. public class Resume : ICloneable { private string sex; private string age; private string tim

大话设计模式C++实现-第9章-原型模式

一.UML图 二.概念 原型模式(Prototype):用原型示例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 三.说明 (1)原型模式实际上就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节. (2)一般在初始化的信息不发生变化的情况下,克隆是最好的办法.这既隐藏了对象创建的细节,有对性能是大大的提高.因为如果不用Clone,每次new,都需要执行一次构造函数,如果构造函数的执行时间很长,那么多次的执行这个初始化操作就实在是太低效了. (3)浅复制和深复制: 浅复

读书笔记_java设计模式深入研究 第九章 访问者模式 Vistor

1,访问者模式的目的是封装一些施加于某种数据结构元素之上的操作,一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变.为不同类型的元素提供多种访问操作方式,且可以在不修改原有系统的情况下增加新的操作方式,这就是访问者模式的动机. 2,UML图: 3,访问者角色: IElement:抽象的事物元素功能接口,定义了固定功能方法以及可变功能方法接口. Element:具体功能的实现类. IVisitor:访问者接口,为所有访问者对象声明一个visit方法,用来代表为对象结构添加的功能,原则上可

「JavaScript里的面向对象」— 5.原型模式

本文原文来源:<Object-Oriented JavaScript>By Stoyan Stefanov 本文翻译来源:赤石俊哉 原创翻译 版权申明: 如果您是原文的原作者并且不希望此文被公开,可以联系作者删除.本文翻译由 赤石俊哉 翻译整理,您可以用于学习目的,但是禁止转载. 第五章 原型模式(Prototype) 在这一章节中你将会学习使用"函数(function)"对象中的prototype属性.在JavaScript的学习过程中,理解prototype的工作原理是

第九章 两种模式的比较

#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <unistd.h> #include <errno.h> #include <string.h> #include

Android学习笔记—第九章 Activity的加载模式

第九章 Activity的加载模式 task:类似于栈,每次打开界面会创建一个task,然后将这开启的界面放入到该task中. (1)standard:默认模式 每次都会创建一个新的界面,将该界面加入task中 (2)singleTop:栈顶单实例模式 a. 如果目标Activity不存在,创建一个新的Activity,存入到task中 b. 如果目标Activity已经存在,并且处于栈顶,不会再创建新的Activity c. 如果目标Activity已经存在,但不处于栈顶,创建一个新的Acti