设计模式——原型模式

来源:互联网 发布:360连接助理软件 编辑:程序博客网 时间:2024/06/05 21:15

原型模式:通过复制现有实例来创建新的实例,无须知道相应类的信息
优点:
使用原型模式创建对象比直接new一个对象更有效
隐藏制造新实例的复杂性
重复地创建相似对象时可以考虑使用原型模式
缺点:
每一个类必须配备一个克隆方法
深层复制比较复杂
注意事项:
使用原型模式复制对象不会调用类的构造方法。所以,单例模式与原型模式是冲突的,在使用时要特别注意。final也不可以。
Object类的clone方法只会拷贝对象中的基本的数据类型,对于数组、容器对象、引用对象等都不会拷贝,这就是浅拷贝。如果要实现深拷贝,必须将原型模式中的数组、容器对象、引用对象等另行拷贝。
适用场合:
复制对象的结构与数据
希望对目标对象的修改不影响既有的原型对象
创建对象成本较大的情况下

@Override    public Mail clone() {        Mail mail = null;        try {            mail = (Mail) super.clone();            //深层拷贝            mail.ars = (ArrayList<String>)this.ars.clone();        } catch (CloneNotSupportedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return mail;    }

应用:

Mail mail = new Mail(et);        while (i < MAX_COUNT) {            Mail cloneMail = mail.clone();            cloneMail.setContent(getRandString(5) + "..."                    + mail.getTail());            cloneMail.setReceiver(getRandString(5) + "@" + getRandString(8)                    + ".com");            sendMail(cloneMail);            i++;        }
0 0