【设计模式】迪米特法则(Demeter Principle)

又称最少知道原则。指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。

其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。

迪米特法则中的“朋友”是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象同当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。

1 案例分析(明星、经纪人、粉丝、媒体公司)

明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如和粉丝的见面会,和媒体公司的业务洽淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人,所以适合使用迪米特法则。

using System;

namespace DesignPattern
{
    internal static class Program
    {
        public static void Main(string[] args)
        {
            var agent = new Agent()
            {
                Star = new Star() {Name = "林青霞"},
                Fans = new Fans() {Name = "李四"},
                Company = new Company() {Name = "新宇宙媒体公司"}
            };
            
            agent.Meeting();
            agent.Business();
        }
    }
    
    /// <summary>
    /// 明星类
    /// </summary>
    public class Star
    {
        public string Name {get;set;}
    }

    /// <summary>
    /// 粉丝类
    /// </summary>
    public class Fans
    {
        public string Name {get;set;}
    }

    /// <summary>
    /// 公司类
    /// </summary>
    public class Company
    {
        public string Name {get;set;}
    }

    /// <summary>
    /// 经纪人类
    /// </summary>
    public class Agent
    {
        public Star Star { get; set; }
        public Fans Fans { get; set; }
        public Company Company { get; set; }

        /// <summary>
        /// 粉丝见面会功能
        /// </summary>
        public void Meeting() => Console.WriteLine(Star.Name + "和粉丝" + Fans.Name + "见面");

        /// <summary>
        /// 业务洽谈功能
        /// </summary>
        public void Business() => Console.WriteLine(Star.Name + "和" + Company.Name + "洽谈");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhy29563

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值