设计模式-原型模式
  7W8ecOFW4G9x 2023年11月09日 30 0

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

设计模式-原型模式_原型模式

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

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

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<String, Shape> shapeMap = new Hashtable<String, Shape>();
 
     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");
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月09日 0

暂无评论

推荐阅读
7W8ecOFW4G9x