您当前的位置: 首页 >  Java

cuiyaonan2000

暂无认证

  • 6浏览

    0关注

    248博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java Design Pattern

cuiyaonan2000 发布时间:2022-06-15 17:17:48 ,浏览量:6

序言

适配器模式

适配器模式(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()方法只能实现浅克隆,即只能将基本类型的值进行复制和引用类型的地址进行复制,没办法将引用类型指向的真正对象进行复制

浅克隆

浅克隆很简单.只需要做如下两步就可以了

  1. 需要被克隆的类实现接口Cloneable
  2. 重写clone方法 
  3. 在重写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

深克隆

深克隆主要有三种方式

  1. 通过new的方式来解决
  2. 通过嵌套调用clone的方式来解决,---此方法就是说如果要被克隆的对象层级深和复杂的情况下代码比较多cuiyaonan2000@163.com
  3. 通过序列化和反序列化的方式来解决

这里主要对比下他们之间的效率问题

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             
关注
打赏
1638267374
查看更多评论
0.0557s