结构型模式-代理Proxy模式

本文介绍了代理模式的基本概念,通过房屋出租的例子详细阐述了代理模式的角色及其应用。代理模式为其他对象提供一种代理以控制对这个对象的访问,适用于需要增加间接层来简化复杂问题的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    代理模式为其他对象提供一种代理以控制对这个对象的访问,它侧重于增加间接层来简化复杂的问题。

代理模式角色:

    ◊Subject定义ConcreteSubjectProxy的共用接口,从而在任何使用ConcreteSubject的地方都可以使用Proxy

    ◊ConcreteSubject定义Proxy所代表的Subject

    ◊Proxy:1维持一个引用,使得代理可以访问Subject2、提供一个与Subject的接口相同的接口,这样代理就可以替代Subject3、控制对Subject的访问,并可能负责对Subject的创建和删除。

    在代理模式中,由于ProxyConcreteSubject继承同一接口,所以Client调用ConcreteSubject可以转化为Client调用Proxy在调用ConcreteSubject,类Proxy为中间代理

    在现实生活中,房东需要出租房子,找一个房产中介公司,中介公司根据需求帮助房东寻找租客,并配合租客看房,中介公司就是代理。

    结构图

    



namespace Libraries.Test.DesignPattern.Proxy
{
    /// <summary>
    /// 房屋出租
    /// </summary>
    public interface IHouseRentals
    {
        /// <summary>
        /// 寻找客户
        /// </summary>
        string LookingCustomers();

        /// <summary>
        /// 带客户看房
        /// </summary>
        string Showings();
    }
}
namespace Libraries.Test.DesignPattern.Proxy
{
    /// <summary>
    /// 实现类
    /// </summary>
    public class HouseRentals : IHouseRentals
    {
        public string LookingCustomers()
        {
            return "寻找客户";
        }


        public string Showings()
        {
            return "带客户看房";
        }
    }
}
namespace Libraries.Test.DesignPattern.Proxy
{
    /// <summary>
    /// 代理类
    /// </summary>
    public class HouseProxy : IHouseRentals
    {
        private IHouseRentals houseRentals = new HouseRentals();

        /// <summary>
        /// 寻找客户
        /// </summary>
        /// <returns></returns>
        public string LookingCustomers()
        {
            return houseRentals.LookingCustomers();
        }

        /// <summary>
        /// 带客户看房
        /// </summary>
        /// <returns></returns>
        public string Showings()
        {
            return houseRentals.Showings();
        }
    }
}
namespace Libraries.Test.DesignPattern.Proxy
{
    public class Client
    {
        public void Excute()
        {
            //寻找客户、带客户看房
            HouseProxy proxy = new HouseProxy();
            string lookCustomers = proxy.LookingCustomers();
            string showimgs = proxy.Showings();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值