# 23种设计模式-代理模式
# 1.代理模式
为其他对象提供一个代理以控制对这个对象的访问
# 优缺点
# 优点:
分离目标对象 : 代理模式能将代理对象与真实被调用的目标对象分离 ; 降低耦合 : 在一定程度上, 降低了系统耦合性 , 扩展性好 ; 保护目标对象 : 代理类代理目标对象的业务逻辑 , 客户端直接与代理类进行交互, 客户端与实际的目标对象之间没有关联 ; 增强目标对象 : 代理类可以在目标对象基础上 , 添加新的功能 ;
# 缺点:
类个数增加 : 代理模式会造成系统中类的个数增加 , 比不使用代理模式增加了代理类 ,系统的复杂度增加; ( 所有的设计模式都有这个缺点 ) 性能降低 : 在客户端和目标对象之间,增加了一个代理对象,造成请求处理速度变慢 ;
# 使用场景
# 实现方式
# 美女类
public class BeautifulGirl {
String name;
public BeautifulGirl(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
# 抽象主题,送礼物接口
public interface GiveGift {
/**
* 送花
*/
void giveFlowers();
/**
* 送巧克力
*/
void giveChocolate();
/**
* 送书
*/
void giveBook();
}
# 自己的类
public class You implements GiveGift {
BeautifulGirl mm ; //美女
public You(BeautifulGirl mm){
this.mm = mm;
}
public void giveBook() {
System.out.println(mm.getName() +",送你一本书....");
}
public void giveChocolate() {
System.out.println(mm.getName() + ",送你一盒巧克力....");
}
public void giveFlowers() {
System.out.println(mm.getName() + ",送你一束花....");
}
}
# 她闺蜜室友
public class HerChum implements GiveGift{
You you;
public HerChum(BeautifulGirl mm){
you = new You(mm);
}
public void giveBook() {
you.giveBook();
}
public void giveChocolate() {
you.giveChocolate();
}
public void giveFlowers() {
you.giveFlowers();
}
}
# 测试类
public class Client {
public static void main(String[] args) {
BeautifulGirl mm = new BeautifulGirl("小屁孩...");
HerChum chum = new HerChum(mm);
chum.giveBook();
chum.giveChocolate();
chum.giveFlowers();
}
}
参考博客:https://blog.csdn.net/qq_25017839/article/details/89633681