设计模式-原型模式

前言

原型模式是在保证性能的同时,用于创建重复的对象。这个方式实现一个原型接口,用于创建这个对象的克隆。比如直接创建对象的代价过大时,就可以使用原型模式。比如一个对象的创建需要高代价的操作数据库后才会被创建。我们可以缓存对象,在下一个请求时返回克隆体。


问:原型模式有什么好处?

答:不必要重复创建,提高性能

问:原型模式有什么缺点?

答:必须实现 Cloneable 接口


代码实现

第一步:创建一个实现了 Cloneable 接口的抽象类。

/**
 * @version 1.0
 * @Description 颜色类
 * @Author wb.yang
 * @Date 2019/12/16 21:17
 */
public abstract class BaseColour implements Cloneable {

	private String id;

	protected String type;

	/**
	 * 画颜色方法
	 */
	abstract void draw();

	public String getType() {
		return type;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	/**
	 * 重写 clone方法
	 *
	 * @return
	 */
	@Override
	public Object clone() {
		Object clone = null;
		try {
			clone = super.clone();
		} catch (CloneNotSupportedException e) {
			e.printStackTrace();
		}
		return clone;
	}

}

第二步:创建颜色的实体类

/**
 * @version 1.0
 * @Description 红色
 * @Author wb.yang
 * @Date 2019/12/16 21:26
 */
public class Red extends BaseColour {

	public Red() {
		type = "Red";
	}


	@Override
	void draw() {
		System.out.println("this is red");
	}
}
/**
 * @version 1.0
 * @Description 蓝色
 * @Author wb.yang
 * @Date 2019/12/16 21:37
 */
public class Blue extends BaseColour {

	public Blue() {
		type = "blue";
	}


	@Override
	void draw() {
		System.out.println("this is blue");
	}
}

第三步:创建一个类,从数据库获取实体类,并把它们存储在一个 Hashtable 中。

/**
 * @version 1.0
 * @Description 颜色缓存
 * @Author wb.yang
 * @Date 2019/12/16 21:39
 */
public class ColourCache {

	/**
	 * 缓存map
	 */
	private static Hashtable<String, BaseColour> colourMap = new Hashtable<>();

	/**
	 * 从缓存map中获取独享
	 *
	 * @param colourId 颜色id
	 * @return
	 */
	public static BaseColour getColour(String colourId) {
		BaseColour cachedColour = colourMap.get(colourId);
		return (BaseColour) cachedColour.clone();
	}

	/**
	 * 本地缓存,缓存
	 */
	public static void loadCache() {
		// 加载红色
		Red red = new Red();
		red.setId("1");
		colourMap.put(red.getId(), red);

		//加载蓝色
		Blue blue = new Blue();
		blue.setId("2");
		colourMap.put(blue.getId(), blue);

	}

第四步:创建原型模式demo,从缓存取出数据。

/**
 * @version 1.0
 * @Description 原型模式demo
 * @Author wb.yang
 * @Date 2019/12/16 21:48
 */
public class PrototypePatternDemo {

	public static void main(String[] args) {

		//加载缓存
		ColourCache.loadCache();

		//获取红色
		BaseColour red = ColourCache.getColour("1");
		System.out.println("Colour : " + red.getType());

		//获取蓝色
		BaseColour blue = ColourCache.getColour("2");
		System.out.println("Colour : " + blue.getType());

	}
}

第五步:输出运行结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值