Java代理设计模式与接口
Posted 王嘻嘻-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java代理设计模式与接口相关的知识,希望对你有一定的参考价值。
目录
一、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();
四、源代码
本小节完^_^
以上是关于Java代理设计模式与接口的主要内容,如果未能解决你的问题,请参考以下文章