[GoF设计模式]Prototype模式和Mediator模式的C++实现

【Prototype模式】

用原型实例指定创建对象的种类,被且通过拷贝这些原型对象创建新的对象。拷贝构造函数应该注意深拷贝和浅拷贝的问题。深拷贝主要是指有指针或者复合对象的情况,而浅拷贝对此只是拷贝了指针,而与其共享同一个副本。编译器提供的默认的拷贝构造函数是按位拷贝的值(Value)类型的拷贝方式。Prototype(下例中的HousePrototype)声明一个克隆自身的接口,而ConcretePrototype(下例中的ApartmentConcretePrototype)则实现一个克隆自身的操作。主调函数则利用一个原型克隆自身从而创建一个新的对象。对客户隐藏了具体的产品类。

【图解】

以住房类(HousePrototype)为例子,其中的CloneMyself函数接口是直接调用拷贝构造函数来实现其自身的克隆,所以在子类(ApartmentConcretePrototype)中的拷贝构造函数的实现是关键所在,要注意深拷贝和浅拷贝的问题,经可能避免内存泄漏。

2

 

【代码】

   

 

 

 

【输出】

 2

 

【Mediator模式】

中介者模式是利用一个中介对象来封装一些列的对象交互。中介者使得各对象不需要显示地相互引用,从而达到松耦合的目的,而且可以使得它们之间的交互可以独立地改变。主要是用于对象较多时,交互关系错综复杂,可以使用其来达到解耦的目的。中介者(Mediator)提供统一的接口用于交互双方(Colleague)之间的通信,具体的中介者(Concrete Mediator)则通过协调各同事以实现协作的行为,因此要知道并引用各同事(Colleague)。由于中介者的行为与要使用的数据与业务关系紧密,抽象的中介者提供一个方便很多对象使用的接口是不现实的,只起到标识接口的作用,往往可以省略。中介者模式很容易应用到系统中,也很容易误用,但系统出现"多对多"交互复杂的对象群时,要予以考虑,一组对象以定义良好但是复杂的方式进行通信,产生了混乱的依赖关系,也导致对象难以复用时,要考虑。[应注意与observer模式的搭配使用来反映发布者和订阅者之间的关系,如果发布者和订阅者很多,关系错综的情况下]

【图解】

以房屋买卖中介为例子,买卖双方都是具体的Concrete Colleague,而房屋的中介是具体的Concrete Mediator。卖方向关联的中介提出出售请求,中介通知关联的买房,过程也可以相反。

 

【代码】

 

【输出】

1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值