首页 > 其他分享 >设计模式-原型模式

设计模式-原型模式

时间:2023-11-08 14:34:09浏览次数:28  
标签:模式 ShapeCache Shape shapeMap 原型 Hashtable Circle 设计模式 public

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

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

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

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

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");

标签:模式,ShapeCache,Shape,shapeMap,原型,Hashtable,Circle,设计模式,public
From: https://blog.51cto.com/u_16151153/8252793

相关文章

  • 立即执行函数的this指向是window(非严格模式下)
    请问以下JS代码最后输出的len值是多少?varlen=117;letfunc={len:935,showLen:function(){console.log(this.len);},show:function(){(function(cb){cb();})(this.showLen)}}func.show();正确答案117立即执行函数的this指......
  • 【Kubernetes】Calico CrossSubnet 模式实
    网络环境主机名宿主机IP地址k8s-master1192.168.3.241k8s-master2192.168.3.242k8s-master3192.168.3.243k8s-node1192.168.32.105注意:k8s-node1是32.0/24网段,跟其他三个节点不同网段。部署VxlanCroossSubnet修改calico.yaml,将CALICO_IPV4POOL_I......
  • 创建者模式
    创建者模式是一种复杂对象创建模式,它将客户端与包含多个组成部分的复杂对象的创建过程分离.客户无需知道复杂对象的内部组成部分与装配方式,只需要知道所需要建造者的类型即可.建造模式关注如何逐步创建一个复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独......
  • Java的设计模式之工厂模式
    在软件设计中,我们经常遇到需要创建不同类型对象的情况,但是如果直接在代码中实例化对象,会使代码紧密耦合在一起,难以维护和拓展,此外,如果对象的创建方式需要变化,那么就需要再整个代码中进行大量的修改。工厂模式旨在解决这个问题。工厂模式提供了一个创建对象的接口,但是将具体的对象创......
  • 详解 Calico 三种模式(与 Fannel 网络对比学习)
    1.概述Calico是一个基于BGP的纯三层网络方案。它在每个计算节点都利用Linuxkernel实现了一个高效的虚拟路由器vRouter来进行数据转发。每个vRouter都通过BGP协议将本节点上运行容器的路由信息向整个Calico网络广播,并自动设置到达其他节点的路由转发规则。Calico保......
  • React学习笔记22-订阅发布模式
    1.订阅发布模式的定义订阅发布模式简单来说就是订阅者进行订阅,发布者进行发布,发布者发布时会通过调度中心通知到每一个订阅者。订阅者根据发布的内容选择是否进行对应的操作。2.实现一个最简单的订阅发布订阅发布模式的核心就是调度中心。一个最简单的调度中心里面应该具有三个......
  • Seata分布式事务框架-AT模式与TCC模式介绍
    SeataAT事务方案Seata的AT模式(AutomaticTransaction)是一种无侵入的分布式事务解决方案。下面结合具体业务场景来分析其执行的原理。业务场景订单系统当用户下订单时,执行以下三步流程:订单系统保存订单订单系统调用库存服务,减少商品库存订单系统调用账户服务,扣减用户金额......
  • 软件设计实验8:适配器模式
    实验8:适配器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解适配器模式的动机,掌握该模式的结构;2、能够利用适配器模式解决实际问题。 [实验任务一]:双向适配器实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。实验要求:1. 画出对应的类图; 2.......
  • 软件设计实验9:桥接模式
    实验9:桥接模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解桥接模式的动机,掌握该模式的结构;2、能够利用桥接模式解决实际问题。 [实验任务一]:两个维度的桥接模式用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。实验要求......
  • 前端常用设计模式
    什么是设计模式?​设计模式(Designpattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,设计模式并不是一种固定的公式,而是一种思想,是一种解决问题的思路;使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可维护性。设计模式不区分编......