设计模式

创建型模式——2原型模式

2019-09-25  本文已影响0人  li_荔枝

声明:设计模式系列笔记摘自http://c.biancheng.net/view/1317.html

1、定义:用一个已经创建好的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象

2、原型模式包括以下主要角色:
a.抽象原型类:规定了具体原型类必须实现的接口。
b.具体原型类:实现了抽象原型类的clone()方法,它是可被复制的对象。
c.访问类:使用了具体原型类中的clone()方法复制新对象。


image.png

3.具体原型类例子:

class Realizetype implements Cloneable{
    Realizetype(){
        System.out.println("具体原型创建成功");
    }
    
    public Object clone() throws CloneNotSupportedException{
        System.out.println("具体原型复制成功");
        return (Realizetype)super.clone();
    }
}

public class PrototypeTest {
    public static void main(String[] args) throws CloneNotSupportedException {
        Realizetype obj1 = new Realizetype();
        Realizetype obj2 = (Realizetype) obj1.clone();
        System.out.println("obj1==obj2?"+(obj1==obj2));
    }
}

结果:
具体原型创建成功!
具体原型复制成功!
obj1==obj2?false

3.2具体原型类例子——奖状(除了名字外,其他属性相同,可以通过复制原型实现)

public class PrototypeCitaion{
    public static void main(String[] args) throws CloneNotSupportedException {
        Citation citaion = new Citation("张三","同学:在2016学年第一学期中表现优秀,被评为三好学生。","仲恺农业工程学院");
        citaion.display();
        Citation citation2 = (Citation) citaion.clone();
        citation2.setName("李四");
        citation2.display();
    }
}

class Citation implements Cloneable{
    private String name;
    private String info;
    private String college;
    
    public Citation(String name, String info, String college) {
        // TODO Auto-generated constructor stub
        this.name = name;
        this.info = info;
        this.college = college;
        System.out.println("奖状创建成功!");
    }
    public Object clone() throws CloneNotSupportedException{
        System.out.println("奖状拷贝成功!");
        return (Citation)super.clone();
    }
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void display(){
        System.out.println(name+info+college);
    }
}

4.应用场景:
a.对象相同或相似,只有个别属性不同
b.对象的创建过程复杂,但是复制过程比较简单的时候。

上一篇 下一篇

猜你喜欢

热点阅读