您的位置:首页 > 其它

设计模式——原型模式

2017-11-02 15:58 183 查看
个人理解:

1. 原型模式用于一个类的实例化的的完全复制

2. 原型模式关键字在于实现Cloneable 接口,与要被复制的类的实例调用clone方法

3. 示例代码中ShapeCache存在的关键在于getShape(String shapeId)方法,该方法获取 id为shapeId的Shape实例,并返回它的clone

4. 本人在Android开发中未应用过该模式,个人认为该模式可用在三级缓存上,或者数据库调用的时候,对性能要求比较高,或者从数据库或者网络获取某一实例代价比较大的时候

示例代码:

产品抽象类(继承Cloneable接口):关键在于实现Cloneable接口&&重写clone方法

public abstract class Shape implements Cloneable {

private String id;

private String type;

public Shape(String id, String type) {
this.id = id;
this.type = type;
}

public String getId() {
return id;
}

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

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}

public abstract void draw();

@Override
protected Object clone() {
Object object = null;
try {
object = su
4000
per.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return object;
}
}


产品实现类:

public class ShapeRectangle extends Shape {

public ShapeRectangle(String id, String type) {
super(id, type);
}

@Override
public void draw() {
Log.i("factory_mode", "----------draw: ShapeRectangle---------");
}
}


public class ShapeCircle extends Shape {

public ShapeCircle(String id, String type) {
super(id, type);
}

@Override
public void draw() {
Log.i("factory_mode", "----------draw: ShapeCircle---------");
}

}


原型管理类(本示例代码为ShapeCache,关键是getShape方法获取实例的clone而已):

public class ShapeCache {

private static Map<String , Shape> shapeMap = new HashMap<>();

public static Shape getShape(String id){
if (shapeMap.containsKey(id)){
return (Shape) shapeMap.get(id).clone();
}
return null;
}

public void loadShape(){
ShapeCircle shapeCircle = new ShapeCircle("circle_01", Constants.EXTRA_SHAPE_CIRCLE);
ShapeCircle shapeRectangle = new ShapeCircle("rectangle_01", Constants.EXTRA_SHAPE_RECTANGLE);
shapeMap.put("circle_01",shapeCircle);
shapeMap.put("rectangle_01",shapeRectangle);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: