代理模式
简介
定义
代理模式属于结构型模式。
由于某些原因需要给某对象提供一个代理以控制对该对象的访问,可以使用代理模式。
好处
- 代理模式能够在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;
- 高扩展性,代理对象可以扩展目标对象的功能;
- 职责清晰,代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度,使得其各司其职。
缺点
- 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢
- 代理模式会造成系统设计中类的数量增加
- 代理模式增加了系统的复杂度;
主要角色
1、抽象接口类:定义一个抽象接口声明需要实现得业务方法。
2、真实产品类:实现了抽象接口类中的具体要实现业务,是代理对象所代表的真实对象,是最终要引用的对象。
3、代理类:提供了与真实主题相同的接口,其内部含有对真实产品的引用,它可以通过扩写方法来实现访问、控制或扩展真实主题的功能。
实例
以下是购买手机的例子
一般我们购买手机不是直接找生产者购买,而是通过代理店铺购买
而代理店铺再向生产者购买,同时代理店铺还能给我们其他服务,如赠送个手机壳等。
创建抽象接口类
package ProxyPattern;
public interface Phone {
void display();
}
创建真实产品类
package ProxyPattern;
public class HuaweiPhone implements Phone {
@Override
public void display() {
System.out.println("欢迎购买华为手机!");
}
}
创建代理类
代理可以扩展本来不具备的功能
package ProxyPattern;
public class HuaweiPhoneProxy implements Phone{
private HuaweiPhone huaweiPhone;
@Override
public void display() {
if (huaweiPhone==null){
huaweiPhone=new HuaweiPhone();
}
sendMassage();
huaweiPhone.display();
thanksMassage();
}
public void thanksMassage() {
System.out.println("感谢您的购买,欢迎再次光临华为手机代理店!");
}
public void sendMassage() {
System.out.println("欢迎通过华为手机代理店购买手机!");
}
}
顾客购买
package ProxyPattern;
public class Client {
public static void main(String[] args) {
HuaweiPhoneProxy proxy=new HuaweiPhoneProxy();
proxy.display();
}
}
结果
关注博主,一起来学习设计模式吧