设计模式——原型模式
2017-11-02 15:58
183 查看
个人理解:
1. 原型模式用于一个类的实例化的的完全复制
2. 原型模式关键字在于实现Cloneable 接口,与要被复制的类的实例调用clone方法
3. 示例代码中ShapeCache存在的关键在于getShape(String shapeId)方法,该方法获取 id为shapeId的Shape实例,并返回它的clone
4. 本人在Android开发中未应用过该模式,个人认为该模式可用在三级缓存上,或者数据库调用的时候,对性能要求比较高,或者从数据库或者网络获取某一实例代价比较大的时候
示例代码:
产品抽象类(继承Cloneable接口):关键在于实现Cloneable接口&&重写clone方法
产品实现类:
原型管理类(本示例代码为ShapeCache,关键是getShape方法获取实例的clone而已):
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); } }
相关文章推荐
- 设计模式之 - 原型模式
- 深入理解JavaScript系列(42):设计模式之原型模式
- C#设计模式-原型模式
- JAVA设计模式(05):创建型-原型模式(Prototype)
- 设计模式之原型模式
- 设计模式--原型模式
- java设计模式3.建造者模式、原型模式
- [译]Java 设计模式之原型
- Android设计模式应用---原型模式
- GoF 23个经典的设计模式04--创建模式之原型模式(未完代续)
- 设计模式C++原型模式(Prototype)
- 可复用面向对象软件基础——设计模式(六)之原型模式
- 设计模式------PROTOTYPE(原型),TEMPLATE(模板)
- java-设计模式-创建模式-原型模式prototype
- 设计模式之:原型模式
- java设计模式(创建型)之原型模式
- 设计模式之原型模式
- 设计模式6:原型模式
- 设计模式(六):原型模式
- 设计模式(十二)------23种设计模式(5):原型模式