返回首页


你可以看到这和其他设计模式的大文章。
{A1}允许您通过创建一个包装类作为代理提供的其他对象的接口。这是代理,包装类,可以添加额外的功能感兴趣的对象,在不改变对象的代码。
下面是其中{A2}是使用的一些常见的例子:添加现有对象的安全访问。代理将确定,如果客户端可以访问感兴趣的对象。简化复杂的对象的API。代理可以提供一个简单的API,使客户端代码没有处理感兴趣的对象的复杂性。提供远程资源,如Web服务或REST资源的接口。协调对远程资源的昂贵的操作要求远程资源,尽快启动之前访问的资源操作。向现有类添加一个线程安全的特点,在不改变现有的类的代码。
总之,代理是正在调用的对象由客户端来访问幕后的真正对象。
让我们来看看{A5} {A7}第一,然后我们将看看一个例子来看看它是如何工作的。下面是{A5} {A}:
{A4}ISubject接口的接口的代理类的RealSubject类实现。它的操作方法。代理类的RealSubject类的代理。它具有realSubject变量指向幕后的真正对象。 它的操作方法封装了真实对象的操作方法。这是的地方,您可以添加额外的逻辑,真正的对象的方法。RealSubject类是幕后的真正对象。它已执行实际工作的操作方法。
让我们看一个例子。在我们的例子中,我们的家庭成员和汽车,这些都是我们不能改变现有的类。我们要进一步明确,只有年满16岁的家庭成员,是可以驱动汽车,我们将代理类添加到这个逻辑。下面是{A5}我们的例子:
{A6}ICAR接口是接口ProxyCar类和汽车接口实现。MoveCar方法。ProxyCar类是为汽车类的代理。它具有realCar变量指向幕后的真正对象。它具有MoveCar方法,它封装了真实对象的MoveCar方法。这是我们提出的额外的逻辑,以确定是否该驱动程序是年满16岁的地方。如果驱动程序不超过16岁,它不会调用实际对象的MoveCar方法。Car类是幕后的真正对象。

下面是实现代码} {A7的输出,使用我们的例子。请注意,代理(ProxyCar)提供了一个网关真正的对象(车),并提供额外的功能,在不改变真正对象的代码:

class Program

{

    static void Main(string[] args)

    {

        ICar car = new ProxyCar(new Driver(16));

        car.MoveCar();



        car = new ProxyCar(new Driver(25));

        car.MoveCar();

    }

}



interface ICar

{

    void MoveCar();

}



//the proxy

class ProxyCar : ICar

{

    private Driver driver;

    private ICar realCar;



    public ProxyCar(Driver driver)

    {

        this.driver = driver;

        realCar = new Car();

    }



    void ICar.MoveCar()

    {

        if (driver.Age <= 16)

            Console.WriteLine("Sorry the driver is too young to drive");

        else

            realCar.MoveCar();

    }

}



//the real object

class Car : ICar

{

    void ICar.MoveCar()

    {

        Console.WriteLine("Car has been driven");

    }

}



class Driver

{

    private int age;



    public int Age

    {

        get { return age; }

        set { age = value; }

    }



    public Driver(int age)

    {

        this.age = age;

    }

}

{A8}
喜欢这篇文章吗?你可以看到这和其他设计模式{A9}的大文章。

回答

评论会员:游客 时间:2012/01/27
阮经天胡:"这是代理,包装类,可以添加额外的功能,在不改变对象的代码感兴趣的对象"我认为,以下是"这是代理,包装类,可以在不改变类的代码添加感兴趣的一个现有类的附加功能(具有相同的接口,或基类)。"也有对象的代理,但没有出台
。Oshtri德卡
评论会员:游客 时间:2012/01/27
。简明因为它应该是