23种设计模式之(十七)中介者模式(Mediator)
本文主要介绍23种设计模式之中介者模式,附详细python/c++示例代码。
- 概念
- 应用场景
- 注意事项
- 代码示例
- 总结
- 代码链接
中介者模式(Mediator)
概念
中介者模式是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用,是用来降低多个对象和类之间的通信复杂性,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。
GoF对中介者模式的定义是:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
应用场景
(1)、 系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
(2)、想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。
C++代码示例
/************************************************************************/
/* 设计模式专题
/*
/* 备忘录模式
/*
/* Author : zzl
/*
/* 编程环境: window10 vs2010
/*
/* Date : 20180918
/************************************************************************/
#include <iostream>
#include "string"
//Caretaker 管理者
// MememTo 备忘录
class MememTo
{
public:
MememTo(std::string name,int age )
{
m_name = name;
m_age = age;
}
std::string getName()
{
return m_name;
}
int getAge()
{
return m_age;
}
void setName(std::string name)
{
this->m_name = name;
}
void setAge(int age)
{
this->m_age = age;
}
private:
std::string m_name;
int m_age;
};
class Person
{
public:
Person(std::string name,int age )
{
m_name = name;
m_age = age;
}
std::string getName()
{
return m_name;
}
int getAge()
{
return m_age;
}
void setName(std::string name)
{
this->m_name = name;
}
void setAge(int age)
{
this->m_age = age;
}
//保存
MememTo* createMememTo()
{
return new MememTo(m_name, m_age);
}
//还原
void setMememTo(MememTo* memto)
{
this->m_age = memto->getAge();
this->m_name = memto->getName();
}
public:
void printT()
{
printf ("m_name:%s m_age:%d " ,m_name.c_str(),m_age );
}
private:
std::string m_name;
int m_age;
};
class Caretaker
{
public:
Caretaker(MememTo *memto)
{
this->memto = memto;
}
MememTo *getMememTo()
{
return memto;
}
void setMememTo(MememTo *memto)
{
this->memto = memto;
}
protected:
private:
MememTo *memto;
};
void main()
{
//MememTo *memto = NULL;
Caretaker *caretaker = NULL;
Person *p = new Person("张三", 32);
p->printT();
//创建 Person对象的一个状态
printf("---------\n");
caretaker = new Caretaker( p->createMememTo());
p->setAge(42);
p->printT();
printf("还原旧的状态\n" );
p->setMememTo(caretaker->getMememTo());
p->printT();
delete caretaker;
delete p;
}
python代码示例
# -*- coding: utf-8 -*-
###################################################################
# 设计模式专题
#
# 备忘录模式
#
# Author : zzl
#
# 编程环境: window10 python2.7
#
# Date : 20180918
##################################################################
class MememTo(object):
def __init__(self, name, age):
self.m_name = name
self.m_age = age;
class Person(object):
def __init__(self, name, age):
self.m_name = name
self.m_age = age
# 创建
def create_mememto(self):
return MememTo(self.m_name, self.m_age)
# 还原
def set_mememto(self, memto):
self.m_age = memto.m_age
self.m_name = memto.m_name
def show(self):
print("m_name:%s m_age:%s " % (self.m_name, self.m_age))
class Caretaker(object):
def __init__(self, memto):
self.memto = memto
def get_mememto(self):
return self.memto
def set_mememto(self, memto):
self.memto = memto
if __name__ == "__main__":
p = Person("张三", 32)
p.show()
# 创建Person对象的一个状态
print("---------")
caretaker = Caretaker(p.create_mememto())
p.m_age = 42
p.show()
print("还原旧的状态")
p.set_mememto(caretaker.get_mememto())
p.show()