静态代理模式
依赖关系的体现,一个类的方法使用到了另一个类的对象(传参数 方法内创建)。
依赖方法,聚合属性。
写方法之前要想清楚,该方法需要什么要求才可以执行(参数),该方法执行后的结果(返回值)怎么处理。
代理模式的好处:
1.如果能实现,用户只能从代理获取类。
2.用户不知情的情况下使用代理可以修改真实类执行。
3.目的 对核心功能函数的保护,防止核心代码过于复杂。
静态代理——-代理对象
动态代理——-代理方法
代码部分:
![L{SU0IG(CCKV5~Z808FK5G.png
package staticproxy;
/**
- 手机接口,用来定义手机规则
*/
public interface Phone {
public abstract void call();
public abstract void play();
public abstract void photo();
} - package staticproxy;
/**
- 商店接口,用来定义代理规则
*/
public interface Store {
public abstract Phone SellPhone();
} - package staticproxy;
/**
- 这个类是手机制造工厂
*/
public class AppleStore implements Store{
// 生产手机
private iPhone createiPhone(){
iPhone iphone = new iPhone();
return iphone;
}
public Phone SellPhone() {
return this.createiPhone();
}
} - package staticproxy;
/**
- 这个是代理商店
*/
public class ProxyStore implements Store{
//依赖 has a
private AppleStore store = new AppleStore();
public Phone SellPhone(){//真的手机
// Phone iphone = store.createiPhone();
//假的手机
Phone iphone = this.createiPhone();
return iphone;
}
//假手机工厂
private Phone createiPhone(){
Phone iphone = new Lphone();
return iphone;
}
}
package staticproxy;
public class iPhone implements Phone{
public void call(){
System.out.println(“真iphonem 打电话信号很好”);
}
public void play(){
System.out.println(“真iphone 玩游戏很流畅”);
}
public void photo(){
System.out.println(“真的iphone 拍照很清晰”);
}
}
package staticproxy;
public class Lphone implements Phone{
public void call(){
System.out.println(“假iphone 打电话信号不好”);
}
public void play(){
System.out.println(“假iphone 玩游戏很烫手”);
}
public void photo(){
System.out.println(“假的iphone 拍照很模糊”);
}
}
package staticproxy;
public class TestMain {
public static void main(String args[]){
// 设计模式
// 面向对象的编程思想
// 类和类之间的关系
// is a
// has a
// use a need a
Store store = new ProxyStore();
Phone phone = store.SellPhone();
phone.call();
phone.photo();
phone.play();
}
}
总结:现在认为静态代理就是用接口实现多态,让用户体验更好,保护核心代码。
