中介者模式学习笔记

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

当然交付的复杂性转变成了中介的复杂性,这就使得终结者会变得比任何一个concretecolleague都复杂。

quk664w154gr

//调用的主函数

class  Program
   
{
       
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();
       }

   }


using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Mediator
{
    
abstract class UniteNations //定义一个抽象联合国类
    {
        
public abstract void declare(string message, Country colleague);
    }

    
abstract class Country //定义一个抽象国家类
    {
        
protected UniteNations mediator;  // 这在uml中体现了关联关系
        public Country(UniteNations mediator)
        
{
            
this.mediator = mediator;
        }

    }

    
//美国
    class USA : Country
    
{
        
public USA(UniteNations 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(UniteNations mediator)
            : 
base(mediator)
        
{ }
        
public void declare(string message)
        
{
            mediator.declare(message, 
this);
        }

        
public void getmesssage(string message)
        
{
            Console.WriteLine(
"伊拉克获得对方消息!" + message);
        }

    }

    
//现在开始实现联合国安理会
    class UnitedNationsSecurityCouncil : UniteNations
    
{
        
private USA _colleague1;  //安理会和具体的国家产生关联关系。
        private Iraq _colleague2;
        
public USA colleague1
        
{
            
set { _colleague1 = value; }
        
//    get { return _colleague1; }
        }

        
public Iraq colleague2
        
{
         
//   get { return _colleague2; }
            set { _colleague2 = value; }
        }

        
public override void declare(string message, Country colleague)
        
{
            
if (colleague == _colleague1)
            
{
                _colleague2.getmesssage(message);
            }

            
else
            
{
                _colleague1.getmessage(message);
            }

        }


    }

}

你可能感兴趣的:(中介者模式)