设计模式之代理模式

设计模式之代理模式

    代理模式就是一个类代表另一个类的功能。代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。代理就如一个人或一个机构代表另一个人或者一个机构采取行动。某些情况下,客户不想或者不能够直接引用一个对象,代理对象可以在客户和目标对象直接起到中介的作用。

用处:想在访问一个类时做一些控制可以使用代理模式。

优点:
     1、职责清晰。
     2、高扩展性。
     3、智能化。

缺点:
     1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 
     2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
/**
 * 创建一个 Image 接口
 * @author YZS
 */
public interface Image {
    void display();
}

/**
 * 实现接口的实体类。
 * @author YZS
 */
public class ProxyImage implements Image {

    private RealImage realImage;
    private String fileName;

    public ProxyImage(String fileName) {
        this.fileName = fileName;
    }

    @Override
    public void display() {
        if (realImage == null) {
            realImage = new RealImage(fileName);
        }
        realImage.display();
    }
}
/**
 * 实现接口的实体类。
 * 
 * @author YZS
 */
public class RealImage implements Image {

    private String fileName;

    public RealImage(String fileName) {
        this.fileName = fileName;
        loadFromDisk(fileName);
    }

    @Override
    public void display() {
        System.out.println("Displaying " + fileName);
    }

    private void loadFromDisk(String fileName) {
        System.out.println("Loading " + fileName);
    }
}
/**
 * 当被请求时,使用 ProxyImage 来获取 RealImage 类的对象。
 * @author YZS
 */
public class ProxyTest {

    public static void main(String[] args) {
        Image image = new ProxyImage("test.png");

        // 图像将从磁盘加载
        image.display();
        System.out.println("***");
        // 图像将无法从磁盘加载
        image.display();
    }
}
    注意: 1、和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。 2、和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值