首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

设计模式-原型模式

原型模式是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。

以获取多种形状为例,共分四步:

1、 创建一个实现了 Cloneable 接口的抽象类。Shape(implements Cloneable)

public abstract class Shape implements Cloneable {

private String id;

protected String type;

public abstract void draw();

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

@Override

public Object clone() {

Object object = null;

try {

object = super.clone();

} catch (CloneNotSupportedException e) {

Log.e("--", e.getMessage());

}

return object;

}

}

2、创建扩展了上面抽象类的实体类。Circle、Rectangle、Square

public class Circle extends Shape {

public Circle() {

type = "Circle";

}

@Override

public void draw() {

Log.e("---", "Inside Circle::draw() method.");

}

}

3、创建一个类,从数据库获取实体类,并把它们存储在一个 Hashtable 中。ShapeCache

public class ShapeCache {

private static Hashtable shapeMap = new Hashtable();

public static Shape getShape(String shapeId) {

Shape shapeCache = shapeMap.get(shapeId);

return (Shape) shapeCache.clone();

}

// 对每种形状都运行数据库查询,并创建该形状

// shapeMap.put(shapeKey, shape);

// 例如,我们要添加三种形状

public static void loadCache() {

Circle circle = new Circle();

circle.setId("1");

shapeMap.put(circle.getId(), circle);

Rectangle rectangle = new Rectangle();

rectangle.setId("2");

shapeMap.put(rectangle.getId(), rectangle);

Square square = new Square();

square.setId("3");

shapeMap.put(square.getId(), square);

}

}

4、使用 ShapeCache 类来获取存储在 Hashtable 中的形状的克隆。

// 使用 ShapeCache 类来获取存储在 Hashtable 中的形状的克隆。

ShapeCache.loadCache();

Shape shapeCache1 = ShapeCache.getShape("1");

Shape shapeCache2 = ShapeCache.getShape("2");

Shape shapeCache3 = ShapeCache.getShape("3");

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OhKD02fLTCzoU_WQ-HsdQNhw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券