静态代理模式
1、对静态代理的理解:定义一个接口,真实角色和代理角色都实现统一接口,客户只和接口打交道[客户直接与代理角色打交道,真实角色对于客户来说是被代理角色隔离起来的,代理角色持有真实角色的引用,代理角色协助真实角色进行前置处理和后置处理,中间的核心业务调用真实角色来完成。使得真实角色处理的核心业务更加存粹,不再去关注一些公共的事情,公共业务由代理来完成,实现了业务的分工,公共业务发生改变时变得更加集中和方便]。
2、代码演示如下:
/**
* 明星接口,代理模式中,给代理角色和真实角色实现
* @author tiger
* @Date 2017年9月3日
*/
public interface Star {
/**
* 面谈
*/
void confer();
/**
* 签合同
*/
void signContact();
/**
* 订票
*/
void bookList();
/**
* 唱歌,核心业务
*/
void sing();
/**
* 收钱
*/
void collectMoney();
}
package com.tiger.proxy;
/**
* 代理角色
* @author tiger
* @Date 2017年9月3日
*/
public class ProxyStar implements Star {
//代理必须持有真实对象的引用
private Star star;
/**
* 默认代理的是邓紫棋
*/
public ProxyStar() {
this.star = new RealStar("邓紫棋");
}
/**
* 这里将来传入真角色(RealStar)
* @param star
*/
public ProxyStar(Star star) {
this.star = star;
}
@Override
public void confer() {
System.out.println("ProxyStar.confer()");
}
@Override
public void signContact() {
System.out.println("ProxyStar.signContact()");
}
@Override
public void bookList() {
System.out.println("ProxyStar.bookList()");
}
/**
* 这个核心业务的逻辑必须请真实角色来实现,代理没有能力自己去实现
*/
@Override
public void sing() {
star.sing();
}
@Override
public void collectMoney() {
System.out.println("ProxyStar.collectMoney()");
}
/**
* 执行里开演出会所需要的流程,给客户直接对接调用
*/
public void operator(){
confer();
signContact();
bookList();
sing();
collectMoney();
}
}
package com.tiger.proxy;
/**
* 真实角色,主要实现核心业务逻辑,作为歌手明星,主要逻辑是唱歌
* @author tiger
* @Date 2017年9月3日
*/
public class RealStar implements Star {
String name;
public RealStar(String name) {
this.name = name;
}
@Override
public void confer() {
System.out.println("RealStar.confer()");
}
@Override
public void signContact() {
System.out.println("RealStar.signContact()");
}
@Override
public void bookList() {
System.out.println("RealStar.bookList()");
}
@Override
public void sing() {
System.out.println(name + " 在倾情演唱!");
}
@Override
public void collectMoney() {
System.out.println("RealStar.collectMoney()");
}
}
package com.tiger.proxy;
/**
* 具有听歌需求的客户,只与顶层接口打交道
* 父类引用不能指向子类特有的方法
* @author tiger
* @Date 2017年9月3日
*/
public class Client {
public static void main(String[] args) {
//方式1
ProxyStar proxy1 = new ProxyStar(new RealStar("周杰伦"));
proxy1.operator();
System.out.println("--------------");
//方式2
Star proxy = new ProxyStar();
//方式3
// Star proxy = new ProxyStar(new RealStar("许嵩"));
proxy.confer();
proxy.signContact();
proxy.bookList();
proxy.sing();
proxy.collectMoney();
}
}
代理模式(静态代理模式、动态代理模式、cgLib代理模式、拦截器)动态代理模式
代理模式-静态代理模式 代理模式-动态代理(基于接口,JDK动态代理)动态代理是代理模式吗
设计模式之代理模式、动态代理模式、Cglib代理模式动态代理是代理模式吗
设计模式之代理模式(包含静态代理和动态代理)设计模式的代理模式
Java设计模式--代理模式--静态代理/动态代理--使用/详解/实例java设计模式之代理模式
【设计模式】代理模式 ( 动态代理使用流程 | 创建目标对象 | 创建被代理对象 | 创建调用处理程序 | 动态创建代理对象 | 动态代理调用 )动态代理是代理模式吗