文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

设计模式系列 - 原型模式

2024-12-02 18:40

关注

原型模式其实很简单,就是利用Java提供的Clonable接口,实现对象的复制。之所以称之为原型模式,是因为我们复制的时候要有一个原型或者模型。该模式经常用于所要创建的对象比较复杂的时候,我们可以直接基于现有的对象复制一个出来直接使用。使用原型模式的时候要考虑Java的深复制和浅复制,要进行深复制的时候建议通过序列化的方式实现。

举个例子

通过一个图形缓存器来演示原型模式的使用。

先来看一下UML :

下面给出一个简单的图形缓存器来演示原型模式(浅复制)。

  1. public abstract class Shape implements Cloneable { 
  2.  
  3.     private String id; 
  4.     protected String type; 
  5.  
  6.     abstract void draw(); 
  7.  
  8.     //篇幅原因,此处省略get,set方法 
  9.  
  10.     //注意这段代码,关键就都在这里了。 
  11.     @Override 
  12.     protected Object clone() { 
  13.         Object clone = null
  14.         try{ 
  15.             clone = super.clone(); 
  16.         }catch (CloneNotSupportedException e){ 
  17.             e.printStackTrace(); 
  18.         } 
  19.         return clone; 
  20.     } 

定义一个Circle实现Shape

  1. public class Circle extends Shape { 
  2.     public Circle(){ 
  3.         type = "Circle"
  4.     } 
  5.  
  6.     @Override 
  7.     void draw() { 
  8.         System.out.println("Inside Circle::draw() method"); 
  9.     } 

定义一个图形缓存器,里面存储创建好的图形,当客户端需要一个新的图形时,直接从图形缓存器复制一个出来。

  1. public class ShapeCache { 
  2.  
  3.     private static Map shapeMap = new HashMap<>(); 
  4.  
  5.     public static Shape getShape(String shapeId){ 
  6.         Shape cacheShape = shapeMap.get(shapeId); 
  7.        // 通过clone的方式返回一个和现有Circle一模一样的新Circle 
  8.         return (Shape) cacheShape.clone(); 
  9.     } 
  10.  
  11.     //创建一个新的Circle,并放进缓存器 
  12.     public static void loadCache(){ 
  13.         Circle circle = new Circle(); 
  14.         circle.setId("1"); 
  15.         shapeMap.put(circle.getId(),circle); 
  16.     } 

客户端这样使用

  1. public class PrototypePatternDemo { 
  2.     public static void main(String[] args){ 
  3.         //创建新的Cirlce并放进缓存器 
  4.         ShapeCache.loadCache(); 
  5.         //通过clone的方式拿到一个和原来一样的新Cirlce 
  6.         Shape cloneShape = ShapeCache.getShape("1"); 
  7.         System.out.println("Shape : " + cloneShape.getType() + "ID : " + cloneShape.getId() ); 
  8.     } 

总结

原型模式很简单,是创建型模式之一,只要记住原型模式就是利用Cloneable实现对象的复制就够了。

 

本文参考:https://www.tutorialspoint.com/design_pattern/prototype_pattern.htm

 

来源: 花括号MC 内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯