Java代理设计模式与接口

Posted 王嘻嘻-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java代理设计模式与接口相关的知识,希望对你有一定的参考价值。

目录

一、JDK内置的两大接口

1、java.lang.Comparable:比较接口

2、java.lang.Cloneable :克隆接口

二、深浅拷贝

三、代理设计模式

四、源代码 


一、JDK内置的两大接口

1、java.lang.Comparable:比较接口

Student是自定义类型,当使用Arrays.sort对自定义类型进行排序时,自定义类型需要实现Comparable,使其具备可比较的能力。

//compare 接口
public class Student implements Comparable<Student>//泛型
    private String name;
    private int age;

    public Student(String name,int age)
        this.name = name;
        this.age = age;
    

    //快捷键 alt + insert
    @Override
    public String toString() 
        return "Student" +
                "name='" + name + '\\'' +
                ", age=" + age +
                '';
    

    public static void main(String[] args)
        Student stu1 = new Student("大喵",26);
        Student stu2 = new Student("二小",12);
        Student stu3 = new Student("三乖",3);
        Student[] students = stu1,stu2,stu3;
        //数组排序算法,年龄升序排列
        Arrays.sort(students);
        System.out.println(Arrays.toString(students));
    
   //此时根据年龄大小来比较,升序排列
    public int compareTo(Student o)
        if (this.age == o.age)
            return 0;
        else if (this.age < o.age)
            return -1;
        
        return 1;
    

//    @Override
//    public int compareTo(Student o) 
//        return 0;
//    

2、java.lang.Cloneable :克隆接口

程序中的克隆:复制一个新的对象,新的对象的属性值是从旧对象中拷贝过来的。

//Cloneable 克隆  是标记接口,没有抽象方法
public class Animal implements Cloneable
    private String name;

    protected Animal clone() throws CloneNotSupportedException
        return (Animal) super.clone();
    

    public static void main(String[] args) throws CloneNotSupportedException 
        Animal animal = new Animal();
        animal.name="zzz";
        Animal animal1 = animal.clone();
        System.out.println(animal == animal1);//false
        System.out.println(animal1.name);//zzz
    

二、深浅拷贝

b1.a.num = 100;//对于b2来说是可见的 -> b1.a和b2.a指向了相同的对象,这种拷贝就称为浅拷贝.
此处的b1和b2确实是两个不同的对象,但是b1和b2内部包含了'A类的引用,这个引用指向相同地址(浅拷贝)
b1和b2内部包含的a确实不是一个对象,这种拷贝称为深拷贝
实现深拷贝的两种方式: a.递归的实现Cloneable          b.通过序列化来进行拷贝   Serializable               将对象转为json字符串(序列化)-都是深拷贝         序列化: 将一个对象转为String

//深浅拷贝
//  用 // 起来的是浅拷贝
class A
//class A implements Cloneable
    int num;
//    protected A clone() throws CloneNotSupportedException
//        return (A) super.clone();
//    


public class B implements Cloneable
    A a = new A();

    @Override
    protected Object clone() throws CloneNotSupportedException 
//        B newB = (B) super.clone();
//        newB.a = a.clone();
//        return newB;
        return (B) super.clone();
    

    public static void main(String[] args) throws CloneNotSupportedException 
        B b1 = new B();
        B b2 = (B) b1.clone();

        System.out.println(b1 == b2);//false
        System.out.println(b2.a.num);//0
        b1.a.num = 100;
        System.out.println(b2.a.num);//100 //0
    

三、代理设计模式

代理设计模式:基于接口的一个接口两个实现类, 一个是真实业务类,另一个是辅助真实业务的代理类。最终将真实业务传递给代理类来完成整个业务的实现。(以代购电脑为例)

//业务接口,你要干的事,你要买的东西
interface ISubject
    //代理核心业务 买个电脑
    void buyComputer();


//真正业务类。真正付钱买电脑的那个人
class RealSubject implements ISubject
    @Override
    public void buyComputer() 
        System.out.println("买个mac pro 15寸顶配,YYDS~");
    


//代理类,辅助我们买电脑
//代理类中有买电脑的辅助操作
class ProxySubject implements ISubject
    private ISubject realSubject;
    public ProxySubject(ISubject subject)
        this.realSubject = subject;
    

    public void preHandle()
        System.out.println("买飞机票去漂亮国~");
    
    @Override
    public void buyComputer() 
        preHandle();
        //付钱这个操作是由真是业务来处理的
        this.realSubject.buyComputer();
        postHandle();
    
    public void postHandle()
        System.out.println("再买飞机票回国,送14+7大礼包(隔离)~");
    


//最终通过平台,将代理人和客户建立联系
class Platform
    public static ISubject getInstance()
        //在代购平台上下单
        return new ProxySubject(new RealSubject());
    


public class Subject 
    public static void main(String[] args) 
        ISubject subject = Platform.getInstance();
        subject.buyComputer();
    

四、源代码 

JDK两种内置接口 比较 和 克隆

接口应用 代理设计模式 代购电脑


本小节完^_^

以上是关于Java代理设计模式与接口的主要内容,如果未能解决你的问题,请参考以下文章

Java代理设计模式与接口

浅谈代理 模式与java中的动态代理

Java之动态代理简介

java设计模式之代理模式:

Java代理模式——静态代理模式

Java 代理模式