1.代理模式
1.1什么是代理模式?具体示范?
代理模式指的是,以实现同一接口规范的两个类A,类B举例,类A并不需要实现不是一定要类A实现的功能,而交由类B去替类A实现那些功能,只有在涉及到类A需要去自己解决的问题时,才调用类A的重写的一种方法,这种模式可以实现对类A的保护和隐藏。同时类B也可以加一些自己独有的操作。
具体示范:(以明星和经纪人为例)
1.1.1.接口(演艺圈)
package ProxyTest;
public interface Star {
void talk();
void plan();
void master();
void sing();
void jump();
void rap();
void playBasketball();
}
1.1.2.被代理人(某明星)
package ProxyTest;
public class Singer implements Star {
//明星不想干的事
@Override
public void talk() {}
@Override
public void plan() {}
@Override
public void master() {}
//明星只负责演出
@Override
public void sing() {
System.out.println("明星需要会唱");
}
@Override
public void jump() {
System.out.println("明星需要会跳");
}
@Override
public void rap() {
System.out.println("明星需要会rap");
}
@Override
public void playBasketball() {
System.out.println("明星需要会篮球");
}
}
1.1.3.某代理人
package ProxyTest;
public class Proxy implements Star {
//经纪人开代理
//1.自由经纪人找一个明星(类型的类)
private Star realStar;
//2.自由经纪人成为这个明星的代理人
public Proxy(Star realStar) {
this.realStar = realStar;
}
//经纪人能整点自己的花活
private void earn() {
System.out.println("经纪人赚了点回扣");
}
//经纪人要干的事
@Override
public void talk() {
System.out.println("经纪人去谈生意");
earn();
}
@Override
public void plan() {
System.out.println("经纪人去规划演出");
earn();
}
@Override
public void master() {
System.out.println("经纪人去营造人设");
earn();
}
//经纪人没办法自己做的,才交给歌手
@Override
public void sing() {
realStar.sing();
}
@Override
public void jump() {
realStar.jump();
}
@Override
public void rap() {
realStar.rap();
}
@Override
public void playBasketball() {
realStar.playBasketball();
}
}
1.1.4.测试演示
package ProxyTest;
public class ProxyTest {
public static void main(String[] args) {
Singer s = new Singer();
Proxy p = new Proxy(s);//经纪人p代理了明星s
//只通过p去调用所有功能,外人只联系经纪人p
//涉及到s的也让p叫s去做
p.talk();//p做
p.plan();//p做
p.master();//p做
p.sing();//p让s做
p.jump();//p让s做
p.rap();//p让s做
p.playBasketball();//p让s做
//这样就让外人不再接触明星s,起到了保护s的功能
}
}
演示截图