找人办事,代理设计模式(Proxy)

本文通过一个生动的例子介绍了代理设计模式的应用场景。以Insus.NET让儿子帮忙为其手机充值为背景,展示了如何通过代理模式来实现这一过程。文中给出了具体的C#代码实现。

用简单的例子,说明代理(Proxy)设计模式。

Insus.NET在家忙写程序没有时间,手机没钱了,叫儿子给一百元去超市(此超市有手机充值的服务)帮Insus.NET手机充值(话费)。
手机充值的事,Insus.NET会做,儿子也会做,但是Insus.NET因某些情况,不能亲自办,叫儿子去代理(Proxy)。

定义一个抽象类[Work],让自己或是儿子类别都能实现的充值方法:

Work
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for Work
/// </summary>
namespace Insus.NET
{
    public abstract class Work
    {
        public abstract void Suppliement();
    }
}


当自己没有特殊情况,或是有时间的情况之,自己去超市对手机充值:

Self
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for Self
/// </summary>
namespace Insus.NET
{
    public class Self : Work 
    {
        public Self()
        {
            //
            // TODO: Add constructor logic here
            //
        }

        public override void Suppliement()
        {
           HttpContext.Current.Response.Write ("手机充值人民币100元");
        }
    }
}


事情代办,叫儿子去帮Insus.NET的手机充值:

Son
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for Son
/// </summary>
namespace Insus.NET
{
    public class Son: Work 
    {
        Self objSelf;
        
        public Son()
        {
            //
            // TODO: Add constructor logic here
            //
        }

        public override void Suppliement()
        {
            if (objSelf == null)
            {
                objSelf = new Self();
            }

            objSelf.Suppliement();
        }
    }
}


asp.net运行程序,在站点建立一个aspx网页:

ProxyDemo.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Insus.NET;

public partial class ProxyDemo : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //自己为Insus.NET手机充值
        Self objSelf = new Self();
        objSelf.Suppliement();


        //儿子(代理)为Insus.NET手机充值。
        Son objSon = new Son();
        objSon.Suppliement();
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值