好久都没有写文章了呢,最近比较忙,一个是课业比较忙,还有一个打算要进修,在准备考试。这几天老师要求做一个记事本(Android课的作业),需要使用到SQLite数据库,肯定很自然的想到数据的增删改查。在以往的项目中,自己都挺随性的,把真正的查询逻辑和其它一些功能写在一起,这样的结果就是导致维护起来很难。刚好最近学校要求我把我的作品申请专利,申请专利需要找一个专利的代理商,然后再由代理商来找真正的专利局来进行申请的操作。我想,上个学期在上JavaEE课程的时候,老师有提到过代理模式,那时候体会还不是很深,现在想想,面向对象设计模式中的代理模式,是不是与申请专利找代理商的过程一样样的呢?我度娘求证了一下,还真是!
我们就以模拟申请专利的过程为例,来说明一下什么是代理模式(Proxy Pattern)
1、UML类图
说明:在这个设计模式中,我定义了一个接口Patent(专利),接口中有一个方法,apply(申请),然后定义两个类,PatentOffice(专利局),PatentAgency(专利代理商)来实现这个接口。其中
a、在PatentOffice类中,有一个私有的成员变量name,表示专利名;同时,除了构造方法外,重写了apply方法,实现申请专利的过程。
b、在PatentAgency类中,有一个私有的成员变量po,这个po是PatentOffice类的一个对象;同时,除了构造方法,它也重写了apply方法,在这个apply方法中,我们将调用PatentOffice类中的apply方法。显然,这时一个代理商找真正机构的过程,这个就是代理模式的思想。我们只要把需要的材料交给代理商,剩下的过程我们不必关心,让代理商去处理,我们只要等结果就好了~
2、代码实现
interface Patent
{
public void apply();
}
class PatentOffice implements Patent
{
private String name;
PatentOffice(String name)
{
this.name = name;
}
@Override
public void apply() {
// TODO Auto-generated method stub
System.out.println("Your Patent:");
System.out.println("\""+name+"\" has been authorized!");
}
}
class PatentAgency implements Patent
{
private PatentOffice po;
PatentAgency(String name)
{
po = new PatentOffice(name);
}
@Override
public void apply() {
// TODO Auto-generated method stub
po.apply();
}
}
public class Main
{
public static void main(String[] args)
{
Patent pa = new PatentAgency("A fantastic method to solve the problem in Computer Sicence");
pa.apply();
}
}
说明:
1、name变量是ProxyOffice私有的,ProxyAgency只需要接收,不需要保存,是一个传递的作用,我们利用这个name来实例化ProxyOffice对象。
运行效果: