静态代理
可以理解为静态店 只能卖苹果手机 不能卖其他的手机
顶级接口
一个类工厂(真实)
一个类代理(假的)存储一个真实类的对象作为属性
用户和真实类之间 隔了一层 在用户不知情的情况下 修改真实的执行—-偷梁换柱
接口:定义规则
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();}
