静态代理
可以理解为静态店 只能卖苹果手机 不能卖其他的手机
顶级接口
一个类工厂(真实)
一个类代理(假的)存储一个真实类的对象作为属性
用户和真实类之间 隔了一层 在用户不知情的情况下 修改真实的执行—-偷梁换柱
接口:定义规则
Store商店接口:
public interface Store {
public Phone selliPhone();
}
Phone手机接口:
public interface Phone {
public void call();
public void play();
public void photo();
}
苹果商店:
/**
* 这是苹果专卖店
* 可以理解为手机的生产工厂
* 用来生产手机 卖手机
*/
public class AppleStore implements Store{
//这是一个工厂店 ----- 手机 关系 依赖
//即 一个类的方法中使用到了另一个类的对象
//生产真机
private iPhone productPhone(){
//创建手机
iPhone iPhone = new iPhone("iPhone7","black");
//将生产的手机返回
return iPhone;
}
//卖真机
public iPhone selliPhone() {
//卖出去工厂生产的手机
return this.productPhone();
}
}
真的iPhone手机:
public class iPhone implements Phone{
//这是真的iPhone手机
private String name;
private String color;
public iPhone(){}
public iPhone(String name,String color){
this.name = name;
this.color = color;
}
public String getName() {
return name;
}
public String getColor() {
return color;
}
public void setName(String name) {
this.name = name;
}
public void setColor(String color) {
this.color = color;
}
public void call() {
System.out.println("真的iPhone手机 打电话很流畅");
}
public void play() {
System.out.println("真的iPhone手机 玩游戏不卡顿");
}
public void photo() {
System.out.println("真的iPhone手机 拍照片很清晰");
}
}
假的lPhone手机:
public class lPhone implements Phone{
//假手机要想以假乱真 那么iPhone有什么功能 lPhone也要有相同的功能
//将这些功能提出来作为规则(接口)
//只要实现了接口 就可以让用户难以分辨是真机还是假机
public void call() {
System.out.println("假的lPhone手机 打电话不流畅");
}
public void play() {
System.out.println("假的lPhone手机 玩游戏很烫手");
}
public void photo() {
System.out.println("假的lPhone手机 拍照片不清晰");
}
}
代理商店:
/**
* 代理商 相当于中间商
*/
public class ProxyStore implements Store{
//要想卖真机 那么需要有苹果工厂 才能源源不断的获得真机
//属性
private AppleStore store = new AppleStore();
//通过卖真手机 得到了很多客源 为了获取更多利润 代理商想造假 卖假手机
private lPhone productlPhone(){
lPhone lPhone = new lPhone();
return lPhone;
}
//代购 卖手机
//将代理商店做的和真的苹果商店一样(以假乱真 即方法和苹果商店的sellPhone方法一样)
public Phone selliPhone() {
//1 有一台真机
Phone iPhone = this.store.selliPhone();
//2 有一台假机
Phone lPhone = this.productlPhone();
//将手机卖出 看心情卖真手机还是假手机
//卖假手机
return lPhone;
}
}
用户:
public static void main(String[] args){
//1 有一个苹果工厂店
// AppleStore as = new AppleStore();
// iPhone iPhone = as.selliPhone();
// iPhone.call();
// iPhone.play();
// iPhone.photo();
//2 有一个代理店
//代理店中除了new对象时不一样 其他的方法、功能都和苹果的一样
//那么用户就无法分清到底得到的是真机还是假机
ProxyStore ps = new ProxyStore();
Phone iPhone = ps.selliPhone();
iPhone.call();
iPhone.play();
iPhone.photo();
}