65.9K
CodeProject 正在变化。 阅读更多。
Home

Proxy

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2008 年 3 月 5 日

CPOL
viewsIcon

9521

代理设计模式 “四人帮” 对此设计模式的定义是:“为另一个对象提供代理或占位符以控制访问”

代理设计模式

四人组对这种设计模式的定义是“为另一个对象提供替代或占位符,以控制对它的访问”。在下面的示例中,我们使用该模式来启用 ASP.net 页面的缓存。这段代码也使用了工厂设计模式。

VB 代理设计模式示例

' My Products Interface
Dim productsProvider As IProducts
Dim cachingEnabled As Boolean = CType(System.Configuration.ConfigurationManager.AppSettings("caching"), Boolean)

productsProvider = ProductsFactory.getProductsProvider(cachingEnabled)

Me.ProductsGrid.DataSource = productsProvider.getProducts()
Me.ProductsGrid.DataBind()

' My Products Interface
Public Interface IProducts
   Function getProducts() As String

End Interface

' Factory Class to create concrete class
Public Class ProductsFactory

   Public Shared Function getProductsProvider(ByVal UseCaching As Boolean) As IProducts
       If UseCaching Then
           Return New ProxyProducts
       Else
           Return New Products
       End If
   End Function
End Class

' The Proxy Products Class
Public Class ProxyProducts
   Implements IProducts   Public Function getProducts() As String Implements IProducts.getProducts
       ' Check if we have the products in cache, if not
       ' then call the getProducts method from the Products class.
   End Function
End Class

' Standard Products Class
Public Class Products
    Implements IProducts

    Public Function getProducts() As String Implements IProducts.getProducts
         ' Query the database for a list of products and return
    End Function

End Class


UML

Proxy Design Pattern UML

这种模式被实现用于内存管理。假设在应用程序中,需要初始化一个包含大量属性和方法的类。如果业务逻辑在这里失败,那么将这个庞大的类加载到内存中将是无用的。例如:

if (driver.Age <= 16)
        return "Young driver";
else
{
        realCar = new Car();
        return realCar.MoveCar();
}

    public class Car : ICar
    {
      // Properties

     // Functions

    }

这里,Car 类只有在年龄大于 16 岁时才会被初始化,否则不会被初始化。

© . All rights reserved.