Modèle intermédiaire - le Conseil de sécurité agit en tant qu'intermédiaire

  Définition du mode médiateur (médiateur) : utilisez un objet médiateur pour encapsuler une série d'interactions d'objets. L'intermédiaire fait que chaque objet n'a pas besoin de se référer explicitement l'un à l'autre, ce qui le rend faiblement couplé, et peut modifier indépendamment l'interaction entre eux. Le modèle intermédiaire est également appelé modèle de médiation, qui est une application typique de la loi de Dimit.

  Utilisez le scénario :

  • Scénarios où un ensemble d'objets communiquent de manière bien définie mais complexe
  • Lorsque vous souhaitez personnaliser un comportement distribué dans plusieurs classes, mais que vous ne souhaitez pas générer trop de sous-classes

  Avantages :

  • Chacune des classes remplit ses fonctions, conformément à la loi de Dimit.
  • Réduisez le couplage entre les objets, rendant les objets faciles à être réutilisés indépendamment.
  • L'association un-à-plusieurs entre les objets est transformée en une association un-à-un, ce qui améliore la flexibilité du système et facilite la maintenance et l'expansion du système.

  Inconvénients :

  • En raison de la centralisation, l'intermédiaire supporte la complexité de l'interaction entre les objets. Lorsqu'il y a plus de collègues, l'intermédiaire devient plus gonflé, compliqué et difficile à maintenir.

  Structure :

  • Rôle de médiateur abstrait (médiateur): il s'agit de l'interface du médiateur et fournit des méthodes abstraites pour l'enregistrement des objets des collègues et la transmission des informations des objets des collègues.
  • Rôle de médiateur concret: implémentez l'interface du médiateur, définissez une liste pour gérer les objets des collègues et coordonnez l'interaction entre les rôles des collègues, donc cela dépend du rôle de collègue.
  • Rôle de la classe collègue abstraite (collègue): définir l'interface de la classe collègue, enregistrer l'objet intermédiaire, fournir une méthode abstraite d'interaction avec l'objet collègue et réaliser les fonctions communes de la classe collègue qui s'influencent mutuellement.
  • Rôle de collègue concret: il est l'implémenteur de la classe collègue abstraite. Lorsqu'il a besoin d'interagir avec d'autres objets collègue, l'objet intermédiaire est responsable des interactions ultérieures.
    Conseil de sécurité
      Contexte du code : Les États-Unis soupçonnent que l'Irak possède des armes nucléaires et menace de déclencher une guerre Le Conseil de sécurité des Nations Unies sert de médiateur et transmet les propos des deux pays.

Intermédiaire abstrait: agence des Nations Unies

    abstract class UnitedNations//联合国机构
    {
    
    
        //声明
        public abstract void Declare(string message, Country colleague);
    }

Intermédiaire spécifique: Conseil de sécurité

    class UnitedNationsSecurityCouncil : UnitedNations//安理会了解所有国家,所以拥有美国和伊拉克的对象属性
    {
    
    
        private USA colleague1;
        private Iraq colleague2;
        //美国
        public USA Colleague1
        {
    
       set{
    
    colleague1=value;} }
        //伊拉克
        public Iraq Colleague2
        {
    
    
            set {
    
     colleague2 = value; }
        }

        //声明
        public override void Declare(string message, Country colleague)//重写实现两个对象间的通信
        {
    
    
            if (colleague == colleague1)
            {
    
    
                colleague2.GetMessage(message);
            }
            else
            {
    
    
                colleague1.GetMessage(message);
            }
        }
    }

Classe de collègue abstrait: pays

    abstract class Country  //国家
    {
    
    
        protected UnitedNations mediator;
        public Country (UnitedNations mediator)
        {
    
    
            this.mediator = mediator;
        }
    }

Catégories spécifiques de collègues: États-Unis, Irak

    class USA:Country//美国
    {
    
    
        public USA(UnitedNations mediator):base(mediator)
        {
    
     }
        //声明
        public void Declare(string message)
        {
    
    
            mediator.Declare(message, this);
        }
        //获得消息
        public void GetMessage(string message)
        {
    
    
            Console.WriteLine("美国获得对方信息:"+message);
        }
    }
    //伊拉克
    class Iraq:Country
    {
    
    
        public Iraq(UnitedNations mediator):base(mediator)
        {
    
     }
        //声明
        public void Declare(string message)
        {
    
    
            mediator.Declare(message,this);
        }
        //获得消息
        public void GetMessage(string message)
        {
    
    
            Console.WriteLine("伊拉克获得对方信息:"+message);
        }
    }

Client:

        static void Main(string[] args)
        {
    
    
            UnitedNationsSecurityCouncil UNSC = new UnitedNationsSecurityCouncil();

            USA c1 = new USA(UNSC);
            Iraq c2 = new Iraq(UNSC);

            UNSC.Colleague1 = c1;//安理会传递话语
            UNSC.Colleague2 = c2;

            c1.Declare("不准研制核武器,否则要发动战争!");
            c2.Declare("我们没有核武器,管好你自己。");

            Console.Read();
        }
    }

Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/CharmaineXia/article/details/111190535
conseillé
Classement