中介者模式-坦克大战-c#

中介者模式解析
本文介绍了一种设计模式——中介者模式,通过一个中介对象来封装一系列对象交互,降低对象间的耦合度,使得各对象可以独立改变其行为而不会影响到其他对象。文章通过具体的代码示例展示了如何在.NET环境下实现中介者模式。

 概要

用一个中介对象来封装一系列对象交互。中介者使各对象不需要相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

类图

中介者模式 

运行 

代码 

using System;
using System.Collections.Generic;

namespace 中介者模式
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Program p = new Program();
            p.main();
            Console.ReadLine();
        }
        void main()
        {
            Mediator mediator = new Mediator();
            Tank tank1 = new Tank();
            Tank tank2 = new Tank();
            Tank tank3 = new Tank();
            mediator.register(tank1);
            mediator.register(tank2);
            mediator.register(tank3);
            tank1.send(2, "你好");
        }
    }
    // 抽象层-------------------------------------------
    interface IMediator
    {
        void send(int byid, int toid, string msg);
        void register(IColleague colleague);
    }
    interface IColleague
    {
        void send(int toid, string msg);
        void receive(int byid, string msg);
        int getId();
        void setMediato(IMediator mediator);
    }
    // 实现层-------------------------------------------
    class Mediator: IMediator
    {
        List<IColleague> colleagues = new List<IColleague>();
        public Mediator()
        {

        }
        public void register(IColleague colleague)
        {
            colleagues.Add(colleague);
            colleague.setMediato(this);
        }
        public void send(int byid, int toid, string msg)
        {
            getTank(toid).receive(byid, msg);
        }
        private IColleague getTank(int id)
        {
            foreach(IColleague colleague in colleagues)
            {
                if(colleague.getId() == id)
                {
                    return colleague;
                }
            }
            return null;
        }
    }
    class Tank: IColleague
    {
        static int index = 0;
        public IMediator mediator;
        int id = 0;
        public Tank()
        {
            id = Tank.index++;    
        }
        public void setMediato(IMediator mediator)
        {
            this.mediator = mediator;
        }

        public void send(int toid, string msg) {
            mediator.send(id, toid, msg);
            Console.WriteLine($"收到:{id}to{toid}:{msg}");
        }
        public void receive(int byid, string msg)
        {
            Console.WriteLine($"收到:{byid}to{id}:{msg}");
        }
        public int getId()
        {
            return id;
        }
    }
}

英语

mediator
n. 调停者; 传递者; 中介物
concrete
adj. 混凝土的; 实在的,具体的; 有形的; vi. 凝结; vt. 使凝固; 用混凝土修筑;
colleague
n. 同事,同僚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值