1、模式的定义
原型模式:用原型实例指定创建的对象种类,通过复制创建新的对象
中介模式:使用中介对象封装一系列对象的交互
2、模式的实现要点
原型模式:通过复制对象的方法来创建对象,java中只要继承Cloneable接口,覆盖clone()方法。
原型实例属性都是原始类,则采用浅拷贝;原型实例属性带有封装类,则采用深拷贝。(深拷贝比浅拷贝,仅仅是将再调用一下封装类的拷贝方法,赋给拷贝类的属性)
中介模式:定义一个中介类,并将其他对象作为中介类的属性,将其他对象的交会封装成几个独立意义的方法,供客户端调用
3、模式的应用场景
原型模式:资源消耗,需要提高生成对象效率的场景;对线程安全要求比较高的场景,比如银行信用卡账单发送系统
中介模式:当一系列对象的交互形成蜘蛛网结构,通过引入中介模式,将交互梳理为星型结构,比如进销存系统、交通调度中心、中介服务
4、实现举例
原型模式
public class Mail implements Cloneable {
private String content;
private String subject;
private ArrayList<String> receiverList;
public void Mail(String content){
this.content = content;
}
@Override
public Mail Clone(){
Mail mail = null;
try{
Mail mail = (Mail)super.clone(); //浅拷贝
this.receiverList = (ArrayList<String>) this.receiverList.clone(); //深拷贝
} catch (CloneNotSupportException e){
}
return mail;
}
...//省略setter 和 getter 方法
}
中介者模式
public class Customer {
public void doSomething1(){
}
public void doSomething2(){
}
}
public class Saller {
public void doSomething1(){
}
public void doSomething2(){
}
}
public class Mediator {
private Customer customer;
private Saller saller;
public Mediator(Customer customer,Saller saller){
this.customer = customer;
this.saller = saller;
}
public void doSomething1(){
customer.doSomething1();
saller.doSomething1();
}
public void doSomething2(){
customer.doSomething2();
saller.doSomething2();
}
}