通过本篇的学习,您将掌握:
1、什么是原型模式
2、原型模式的使用场景
3、原型模式的封装
4、如何使用封装的原型模式
前言:
原型模式是一个创建型的模式。原型二字表明了该模式应该有个样本实例,用户从这个样板对象中复制一个内部属性一致的对象,这个过程称为克隆。被复制的对象称为原型。这个原型是可定制的。原型模式多用于创建复杂的或者构建耗时的实例,因为这种情况下,复制一个已经存在的实例可供程序高效运行。
一、什么是原型模式
用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象
二、原型模式的使用场景
1、类初始化需要消化非常多的资源,这些资源包括数据、硬件资源等,通过原型拷贝避免这些消耗。
2、通过new一个对象需要非常繁琐的数据准备或者访问权限,这时可以使用原型对象。
三、原型模式的封装
原型模式主要由三大块组成:
1、Client:客户端用户
2、Prototype:抽象类或者接口,声明具备clone能力
3、ConcretePrototype:具体的原型类
下面我们通过一个demo的具体代码来体现原型模式在项目中的具体使用: 1、ConcretePrototype以及Prototype
/**
* WordDocument:ConcretePrototype具体的原型类
* Cloneable :Prototype接口,具备clone能力
*/
public class WordDocument implements Cloneable {
private String mText;//文本
private List<String> mImages = new ArrayList<String>();//图片列表
public WordDocument(){
System.out.println("worddocument构造函数");
}
@Override
public WordDocument clone() {
WordDocument doc= null;
try {
doc = (WordDocument) super.clone();
doc.mText = this.mText;
doc.mImages = this.mImages;
return doc;
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return null;
}
public String getmText() {
return mText;
}
public void setmText(String mText) {
this.mText = mText;
}
public List<String> getmImages() {
return mImages;
}
public void addImages(String mImage) {
this.mImages.add(mImage);
}
//文档打印内容
public void showDocument(){
System.out.println("--------Word-Start-------");
System.out.println("mText:"+mText);
System.out.println("mImage:"+mImages);
for (String imgName:mImages)
{
System.out.println("imgNmae:"+imgName);
};
System.out.println("--------Word-End-------");
}
}
2、客户端(即调用封装的原型模式代码):
WordDocument orgin =new WordDocument();
orgin.setmText("第一篇文档");
orgin.addImages("第一张图片");
orgin.addImages("第二张图片");
orgin.showDocument();
WordDocument copy = orgin.clone();
copy.setmText("这时修改后的第二篇文档");
copy.addImages("Lucky.jpg");
copy.showDocument();
orgin.showDocument();