设计模式-原型模式

设计模式之原型模式

原型模式指的是通过原型实例拷贝新的对象,其实就是通过对象自身复制自己的能力。

原型模式比较简单,它能够让对象具备复制自己的能力。一般原型模式会有一个抽象原型角色,若对象实例想具备复制自己的能力,需要继承该抽象原型角色。

原型模式UML类图

图1所示,原型模式的抽象接口有一个clone方法,所有需要具有复制自己能力的类需要实现该接口。

该类图中具体原型类有Film类和Music类,假如电影和音乐能够复制,就可以通过原始文件拷贝无数份了。

这里写图片描述

图1

代码实现

原型抽象接口-Prototype

/**
 * <p>文件描述: 原型抽象接口</p>
 *
 * @Author luanmousheng
 * @Date 17/7/5 下午11:00
*/
public interface Prototype {

    /**
     * 实现原型的抽象方法
     * @return
     */
    Object clone();
}

具体原型类-Film

/**
 * <p>文件描述: 电影类,可以拷贝自己</p>
 *
 * @Author luanmousheng
 * @Date 17/7/5 下午11:02
*/
public class Film implements Prototype {

    //模拟电影具体内容
    private String content;

    public Film(String content) {
        this.content = content;
    }

    @Override
    public Object clone() {
        return new Film(this.content);
    }

    public String getContent() {
        return this.content;
    }
}

具体原型类-Music

/**
 * <p>文件描述: 音乐类,可以拷贝自己</p>
 *
 * @Author luanmousheng
 * @Date 17/7/5 下午11:07
*/
public class Music implements Prototype {

    //模拟音乐具体内容
    private String content;

    public Music(String content) {
        this.content = content;
    }

    @Override
    public Object clone() {
        return new Music(this.content);
    }

    public String getContent() {
        return this.content;
    }
}

原型测试类-PrototypePatternDemo

/**
 * <p>文件描述: 原型模式测试类</p>
 *
 * @Author luanmousheng
 * @Date 17/7/5 下午11:09
*/
public class PrototypePatternDemo {

    public static void main(String[] args) {
        //电影"肖申克的救赎"的原件
        Film shawshankRedemption = new Film("电影\"肖申克的救赎\"");
        //电影"肖申克的救赎"的拷贝
        Film copyOfShawshankRedemption = (Film) shawshankRedemption.clone();
        System.out.println(copyOfShawshankRedemption.getContent());

        //音乐"道歉"原件
        Music apologize = new Music("歌曲\"道歉\"");
        //音乐"道歉"的拷贝
        Music copyOfApologize = (Music) apologize.clone();
        System.out.println(copyOfApologize.getContent());
    }
}

测试输出结果为:

电影"肖申克的救赎"
歌曲"道歉"

实际上,JDK已经提供了Clone接口,具体实现原型类的时候直接使用该接口即可,本文是为了更好的理解原型模式而定义了该接口。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章