原型模式

原型模式使之 “用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。”

“用原型实例指定创建对象的种类” 可理解为 “新建一个对象”,运用一个原型指定对象种类

“通过拷贝这些原型创建新的对象” 可理解为 “通过现有对象的复制实现新对象的创建”

举一个很简单的例子.

我有一次在学校,舍友告诉我宿舍的钥匙丢了,于是我马上去小卖部找师傅配钥匙,只见师傅把我的钥匙放在机器上,一按按钮一下子就出来两个一模一样的钥匙了.


原型模式结构:由 “客户角色”、”抽象原型角色“、具体原型角色 组成

客户角色:客户类提出创建对象的请求

抽象原型角色:这是一个抽象角色,通常由一个Java接口或Java抽象类实现。此角色给出所有的具体原型类所需的接口

具体原型角色:被复制的对象.此角色需要实现抽象的原型角色所要求的接口。

原型模式的优势

1.允许动态得增加或减少产品类,由于创建产品类实例的方法是产品内部具有的,一次增加新产品对整个结构没有影响

2.提供简化的创建结构

3.具有给一个应用软件动态加载新功能的能力

4.产品类不需要非得有任何事先确定的等级结构,因为原型模式适用于任何等级结构,

原型模式的应用场景

1.当系统创建动态加载的对象并且产品具有一定的层次性时

2.当产品结构经常变化时

3.当需要复制一个现有的对象进行新对象生产时

具体示例

如下


源码

package model.prototype;
/*
 * 原型类(以猪为例),注意要实现Cloneable接口
 */
public abstract class AbstractPig  implements Cloneable{

	public String pigName;

	public String getPigName() {
		return pigName;
	}

	public void setPigName(String pigName) {
		this.pigName = pigName;
	}
	
	@Override
	protected Object clone() throws CloneNotSupportedException {
		try {
			return super.clone();
		} catch (Exception e) {
			System.out.println("此对象不支持复制");
		}
		
		return null;
	}
	
	
}

package model.prototype;

/*
 * 给原型对象赋值
 */
public class SonPig extends AbstractPig {
	public SonPig(){
		setPigName("白猪");
	}
	
}

package model.prototype;

/*
 * 客户端程序
 */
public class Test {
	
	public static void main(String[] args) throws CloneNotSupportedException {
		AbstractPig pig = new SonPig();
		System.out.println(pig.getPigName());
		
		//通过对象的clone()方法,即可获得对象的一个copy
		AbstractPig pig2 = (AbstractPig)pig.clone();
		
		System.out.println("拷贝的"+pig2.getPigName());
	}
	
}

原型模式与Spring


基于Spring框架的Bean ,可以在配置文件中用单例模式和原型模式进行创建方式进行 创建Bean

Bean 的配置的时候可以加上 scope="prototype"来设置为原型的方式创建 去这singleton=“true“是单例模式进行创建 Bean


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值