【Prototype模式】
用原型实例指定创建对象的种类,被且通过拷贝这些原型对象创建新的对象。拷贝构造函数应该注意深拷贝和浅拷贝的问题。深拷贝主要是指有指针或者复合对象的情况,而浅拷贝对此只是拷贝了指针,而与其共享同一个副本。编译器提供的默认的拷贝构造函数是按位拷贝的值(Value)类型的拷贝方式。Prototype(下例中的HousePrototype)声明一个克隆自身的接口,而ConcretePrototype(下例中的ApartmentConcretePrototype)则实现一个克隆自身的操作。主调函数则利用一个原型克隆自身从而创建一个新的对象。对客户隐藏了具体的产品类。
【图解】
以住房类(HousePrototype)为例子,其中的CloneMyself函数接口是直接调用拷贝构造函数来实现其自身的克隆,所以在子类(ApartmentConcretePrototype)中的拷贝构造函数的实现是关键所在,要注意深拷贝和浅拷贝的问题,经可能避免内存泄漏。
【代码】
【输出】
【Mediator模式】
中介者模式是利用一个中介对象来封装一些列的对象交互。中介者使得各对象不需要显示地相互引用,从而达到松耦合的目的,而且可以使得它们之间的交互可以独立地改变。主要是用于对象较多时,交互关系错综复杂,可以使用其来达到解耦的目的。中介者(Mediator)提供统一的接口用于交互双方(Colleague)之间的通信,具体的中介者(Concrete Mediator)则通过协调各同事以实现协作的行为,因此要知道并引用各同事(Colleague)。由于中介者的行为与要使用的数据与业务关系紧密,抽象的中介者提供一个方便很多对象使用的接口是不现实的,只起到标识接口的作用,往往可以省略。中介者模式很容易应用到系统中,也很容易误用,但系统出现"多对多"交互复杂的对象群时,要予以考虑,一组对象以定义良好但是复杂的方式进行通信,产生了混乱的依赖关系,也导致对象难以复用时,要考虑。[应注意与observer模式的搭配使用来反映发布者和订阅者之间的关系,如果发布者和订阅者很多,关系错综的情况下]
【图解】
以房屋买卖中介为例子,买卖双方都是具体的Concrete Colleague,而房屋的中介是具体的Concrete Mediator。卖方向关联的中介提出出售请求,中介通知关联的买房,过程也可以相反。
【代码】
【输出】