设计模式之原型模式
2023-09-14 09:12:27 时间
该模式又称之为克隆模式,该模式相对来说很简单。其实这个模用一个词来形容最恰当不过,这个词就是“依葫芦画瓢”。之所以使用克隆模式创建一个对象,可能就是直接创建该对象的代价和成本较大,比如在昂贵的数据库操作之后要创建一个对象。我们可以缓存对象,在下一个请求时返回其克隆,并在需要时更新数据库,从而减少数据库调用。这样,即达到了创建对象的目的,也减少了对数据库的频发操作。何乐而不为。
使用过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后的对象,在这里就不再赘述了。
相关文章
- 23种设计模式之工厂模式
- 前端的设计模式系列-适配器模式
- 工厂模式(创造型设计模式)
- 单例模式(创造型设计模式)
- strictmode android,Android 应用性能优化-StrictMode(严格模式)
- 解释器模式-破解算术验证码
- Go学设计模式--原型模式的考查点和使用推荐
- 「Native+小程序」的开发模式优势在哪?
- Java设计模式之原型模式
- 设计模式 | 行为型 | 备忘录模式
- 面向对象设计模式--原型模式详解+实际应用(Java)
- 【设计模式】原型模式 ( 概念简介 | 使用场景 | 优缺点 | 基本用法 )
- 【设计模式】状态模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
- php设计模式(七):原型模式(Prototype)
- 装饰器模式 Decorator 结构型 设计模式 (十)详解程序员
- Scalaz(10)- Monad:就是一种函数式编程模式-a design pattern详解编程语言
- Java设计模式之单例模式详解编程语言
- PHP设计模式_单例模式详解编程语言
- PHP设计模式_适配器模式详解编程语言
- Oracle收费新模式:实现优惠与价值并存(oracle 收费方式)
- MySQL的三种复制模式解析复制半同步复制全同步复制(mysql三种复制模式)
- 研究Redis集群模式分布式存储的极致体验(什么是redis集群模式)
- php设计模式Command(命令模式)
- php设计模式Prototype(原型模式)代码
- PHP设计模式之代理模式的深入解析
- java设计模式之单例模式学习
- php设计模式之命令模式使用示例
- android设计模式之单例模式详解
- Python设计模式之单例模式实例
- C#设计模式之观察者模式实例讲解
- 浅析php适配器模式(Adapter)