23种设计模式之(十七)中介者模式(python_c++实现)

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()





源码链接

设计模式(十七)中介者模式示例代码(python–c++)

猜你喜欢

转载自blog.csdn.net/zzl_python/article/details/82762727