设计模式之原型模式

该模式又称之为克隆模式,该模式相对来说很简单。其实这个模用一个词来形容最恰当不过,这个词就是“依葫芦画瓢”。之所以使用克隆模式创建一个对象,可能就是直接创建该对象的代价和成本较大,比如在昂贵的数据库操作之后要创建一个对象。我们可以缓存对象,在下一个请求时返回其克隆,并在需要时更新数据库,从而减少数据库调用。这样,即达到了创建对象的目的,也减少了对数据库的频发操作。何乐而不为。

使用过Okhttp这个类的创建还是挺复杂的,而且这个类本身也提供了一个clone方法:

 class OkhttpClient implement Cloneable{
    /** Returns a shallow copy of this OkHttpClient.
    返回一个OkhttpClient的浅拷贝 */
   @Override public OkHttpClient clone() {
    return new OkHttpClient(this);
    }
 }
 //注意构造器时候私有的
  private OkHttpClient(OkHttpClient okHttpClient) {
    this.routeDatabase = okHttpClient.routeDatabase;
    this.dispatcher = okHttpClient.dispatcher;
    this.proxy = okHttpClient.proxy;
    this.protocols = okHttpClient.protocols;
    this.connectionSpecs = okHttpClient.connectionSpecs;
    this.interceptors.addAll(okHttpClient.interceptors);
    this.networkInterceptors.addAll(okHttpClient.networkInterceptors);
    this.proxySelector = okHttpClient.proxySelector;
    this.cookieHandler = okHttpClient.cookieHandler;
    this.cache = okHttpClient.cache;
    this.internalCache = cache != null ? cache.internalCache : okHttpClient.internalCache;
    this.socketFactory = okHttpClient.socketFactory;
    this.sslSocketFactory = okHttpClient.sslSocketFactory;
    this.hostnameVerifier = okHttpClient.hostnameVerifier;
    this.certificatePinner = okHttpClient.certificatePinner;
    this.authenticator = okHttpClient.authenticator;
    this.connectionPool = okHttpClient.connectionPool;
    this.network = okHttpClient.network;
    this.followSslRedirects = okHttpClient.followSslRedirects;
    this.followRedirects = okHttpClient.followRedirects;
    this.retryOnConnectionFailure = okHttpClient.retryOnConnectionFailure;
    this.connectTimeout = okHttpClient.connectTimeout;
    this.readTimeout = okHttpClient.readTimeout;
    this.writeTimeout = okHttpClient.writeTimeout;
  }

在Java中,各个对象的老祖就是Object这个对象,该类提供了一个clone方法,顾名思义,这个方法就是用来克隆对象的。
在这里插入图片描述
可以看出,当一个类要重写Object的clone方法的时候,该类必须要集成 Cloneable这个接口,最终会调用internalClone这个方法。
当然,具体clone方法具体怎么实现,就要看自己的需求了,是深copy还是浅copy,全看自己怎么使用clone后的对象,在这里就不再赘述了。

已标记关键词 清除标记
1) 优秀的程序应该是这样的:阅读时,感觉很优雅;新增功能时,感觉很轻松;运行时,感觉很快速,这就需要设计模式支撑。<br /> <br /> 2) 设计模式包含了大量的编程思想,讲授和真正掌握并不容易,网上的设计模式课程不少,大多讲解的比较晦涩,没有真实的应用场景和框架源码支撑,学习后,只知其形,不知其神。就会造成这样结果: 知道各种设计模式,但是不知道怎么使用到真实项目。本课程针对上述问题,有针对性的进行了升级 (1) 授课方式采用 图解+框架源码分析的方式,让课程生动有趣好理解 (2) 系统全面的讲解了设计模式,包括 设计模式七大原则、UML类图-类的六大关系、23种设计模式及其分类,比如 单例模式的8种实现方式、工厂模式的3种实现方式、适配器模式的3种实现、代理模式的3种方式、深拷贝等<br /> <br /> 3) 如果你想写出规范、漂亮的程序,就花时间来学习下设计模式吧<br /> <br /> 课程内容和目标<br /> <br /> 本课程是使用Java来讲解设计模式,考虑到设计模式比较抽象,授课采用 图解+框架源码分析的方式<br /> <br /> 1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括:创建型模式:单例模式(8种实现)、抽象工厂模式原型模式、建造者模式、工厂模式。结构型模式:适配器模式(3种实现)、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式(3种实现)。行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)<br /> <br /> 2) 学习目标:通过学习,学员能掌握主流设计模式,规范编程风格,提高优化程序结构和效率的能力。<br /> <div> <br /> </div>
相关推荐
<p> <b><span style="background-color:#FFE500;">【超实用课程内容】</span></b> </p> <ul> <li> <span style="font-size:14px;">本课程主要是对<span>项目开发中经常使用到的设计模式进行讲解,每一种设计模式都会阐述概念、业务/生活场景、代码实现等内容。</span></span> </li> <li> <span style="font-size:14px;"><span>本课程的宗旨是以最少成本让开发者快速熟悉设计模式的设计思想和实现过程。</span></span> </li> <li> <span style="font-size:14px;"><span>本课程主要以简洁优雅的 go 语言进行实现,假如读者有需要,本课程后续也支持 java 版本的实现。</span></span> </li> </ul> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <span style="color:#000000;background-color:#FFE500;"><b><br /> </b></span> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <span style="color:#000000;background-color:#FFE500;"><b>【课程如何观看?】</b></span> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <span style="color:#000000;">PC端:<span style="color:#000000;"><a href="https://edu.csdn.net/course/detail/26277"><span id="__kindeditor_bookmark_start_21__"></span></a><a href="https://edu.csdn.net/course/detail/26297">https://edu.csdn.net/course/detail/26297</a></span></span> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <span style="color:#000000;">移动端:CSDN 学院APP(注意不是CSDN APP哦)</span> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <span style="color:#000000;">本课程为录播课,课程永久有效观看时长,但是大家可以抓紧时间学习后一起讨论哦~</span> </p> <p style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <br /> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <br /> </p> <p> <br /> </p>
<div> <span style="font-size:16px;"><span><span style="font-size:20px;color:#FF0000;"><strong><span>课程亮点:</span></strong></span></span></span> </div> <div style="font-size:16px;"> <span style="color:#424242;"><span style="background-color:#FFFAA5;">课程培训详细的笔记以及实例代码,让学员开始掌握设计模式知识点</span></span> </div> <p style="font-size:16px;"> <span style="font-size:14px;"><span><span style="background-color:#FFFFFF;"><span style="color:#424242;"><br /></span></span></span></span> </p> <div> <div> <span style="font-size:16px;"><span><strong><span style="background-color:#FFFFFF;">课程内容:</span></strong></span></span> </div> <div> <ol><li> <span style="font-size:16px;color:#E53333;"><strong>工厂模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式原型模型、代理模式、单例模式、适配器模式</strong></span> </li> <li> <span style="font-size:16px;color:#E53333;"><strong>策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式</strong></span> </li> </ol></div> </div> <div style="font-size:16px;"> <span style="color:#FF0000;"><strong><span style="font-size:18px;">课程特色:</span></strong></span> </div> <div> <ol><li> 笔记设计模式,用笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 </li> <li> 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 </li> <li> 笔记以超链接形式让知识点关联起来,形式知识体系 </li> <li> 采用先概念后实例再应用方式,知识点深入浅出 </li> <li> <strong>提供授课内容笔记作为课后复习以及工作备查工具</strong> </li> </ol></div> <p> <span style="font-size:16px;"><span><span style="color:#00B050;"><strong><strong><span style="font-size:18px;">部分图表(电脑PC端查看):</span></strong></strong></span></span></span> </p> <p> <span style="font-size:16px;"><span><span style="color:#00B050;"><strong><strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/201905251242348850.png" alt="" /><img src="https://img-bss.csdn.net/201905251242404542.png" alt="" /><img src="https://img-bss.csdn.net/201905251242469204.png" alt="" /><img src="https://img-bss.csdn.net/201905251242514951.png" alt="" /><img src="https://img-bss.csdn.net/201905251243028561.png" alt="" /><br /></span></strong></strong></span></span></span> </p>
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值