适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
适配器模式很好理解,实现起来也很简单.主要是我们要怎么实现,实现方式的不同,决定了该模式的运用的好坏cuiyaonan2000@163.com
场景1需要调用A类的方法,但是a方法的入参是字符串,不能直接调用.所以使用适配器,做个简单的处理,来替代A
package nan.yao.cui.test;
/**
* @Author: cuiyaonan2000@163.com
* @Description: todo
* @Date: Created at 2022-6-6 9:38
*/
public class Test01 {
public class A{
public void doA(String temp){
System.out.println("the temp is :" + temp);
}
}
public interface Target {
public void doTarget(Integer i);
}
public class Adapter implements Target{
private A a;
public Adapter(A a){
this.a = a;
}
@Override
public void doTarget(Integer i) {
a.doA(i.toString());
}
}
}
场景2
官方的例子看着代码多,稍微绕一点.但是其实是适配器模式和工厂模式的整合.根据参数的来选择实例化哪个一个实现对象,来做操作cuiyaonan2000@163.com
https://www.runoob.com/design-pattern/adapter-pattern.html
原型模式原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.
Object默认提供了clone()方法只能实现浅克隆,即只能将基本类型的值进行复制和引用类型的地址进行复制,没办法将引用类型指向的真正对象进行复制
浅克隆浅克隆很简单.只需要做如下两步就可以了
- 需要被克隆的类实现接口Cloneable
- 重写clone方法
- 在重写clone方法中调用super.clone() --------既然Object已经提供了clone方法,为什么我们不能直自己写个方法调用super.clone()呢cuiyaonan2000@163.com
查看Cloneable可以看到该接口没有方法(就是一个标记),
查看Object中的clone方法声明
综上所述了解到.Object的clone()方法 首先被protected修饰表明该方法只能在子类方法中调用,不能直接通过对象直接调用.
其次被native修饰表明该方法的实现不是使用的Java库,而是通过JNI的方式实现的.即不是java库实现的clone.
所以Cloneable接口只是一个标记,告诉JVM在实例化该对象的时候提供对应的JNI的实现.cuiyaonan2000@163.com
深克隆深克隆主要有三种方式
- 通过new的方式来解决
- 通过嵌套调用clone的方式来解决,---此方法就是说如果要被克隆的对象层级深和复杂的情况下代码比较多cuiyaonan2000@163.com
- 通过序列化和反序列化的方式来解决
这里主要对比下他们之间的效率问题
package nan.yao.cui.test;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: cuiyaonan2000@163.com
* @Description: todo
* @Date: Created at 2022-6-6 9:38
*/
public class Test01{
public static void main(String[] args) throws CloneNotSupportedException, IOException, ClassNotFoundException {
series();
newTest();
doclone();
}
public static void series() throws IOException, ClassNotFoundException {
long time = System.currentTimeMillis();
List studentList = new ArrayList(100000);
Student student_1 = new Student("小明",12, (byte) 1,new Teacher("小明老师",22));
for(int i =1 ; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?