模式动机:
public interface IGiveGift {void GiveDolls();void GiveFlowers();void GiveChocolate();}//此类中的@Data用到了lombok的注解,可以自动提供get set方法,节省代码量//请参考“eclipse使用lombok”博客。import lombok.Data;public @Data class SchoolGirl {String name;}public class Pursuit implements IGiveGift {SchoolGirl mm;public Pursuit(SchoolGirl mm) {super();this.mm = mm;}public Pursuit() {super();}@Overridepublic void GiveDolls() {// TODO Auto-generated method stubSystem.out.println(mm.getName()+"送你洋娃娃。");}@Overridepublic void GiveFlowers() {// TODO Auto-generated method stubSystem.out.println(mm.getName()+"送你鲜花。");}@Overridepublic void GiveChocolate() {// TODO Auto-generated method stubSystem.out.println(mm.getName()+"送你巧克力。");}}public class Proxy implements IGiveGift {Pursuit gg;public Proxy() {super();}public Proxy(SchoolGirl mm) {super();this.gg = new Pursuit(mm);}@Overridepublic void GiveDolls() {// TODO Auto-generated method stub gg.GiveDolls();}@Overridepublic void GiveFlowers() {// TODO Auto-generated method stub gg.GiveFlowers();}@Overridepublic void GiveChocolate() {// TODO Auto-generated method stub gg.GiveChocolate();}}public class Test {public static void main(String[] args) {SchoolGirl mm = new SchoolGirl(); mm.setName("小美");Proxy daili = new Proxy(mm); daili.GiveDolls(); daili.GiveFlowers(); daili.GiveChocolate();}}
public interface Subject{public void request();}
public RealSubject implement Subject{public void request(){//真实请求}}
public class Proxy implement Subject{RealSubject realSubject;public Proxy(){ realSubject = new RealSubject();}public void request(){ realSubject.request(); }}
public static void main(String[] args) {Proxy proxy = new Proxy(); proxy.request();}代理模式的优点
代理模式的缺点
根据代理模式的使用目的,常见的代理模式有以下几种类型:
注:若手机上部分代码显示不清楚,可以选择点击左下角“阅读原文”。
往期回顾
设计模式(一) | 啥是工厂模式和策略模式?
设计模式(二) | 装饰模式---穿什么有这么重要?