欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

说说 JAV 劳务派遣信息管理系统 A 署理模式

点击: 次  来源:宝鼎软件 时间:2017-08-07

原文出处: 姜肇海 投稿

事例

小张是一个普普通通的码农,天天勤勤恳恳地码代码。某天中午小张刚要去用饭,一个电话打到了他的手机上。“是XX公司的小张吗?我是YY公司的王AA”。“哦,是王总啊,有什么工作吗?”。相同事后,小张弄大白了,本来客户有个需求,恰好认真这方面开拓的是小张,劳务派遣管理系统,客户就直接找到了他。不外小张却没有承诺客户的请求,软件开发,而是让客户找产物司理小李相同。

是小张着急去吃面而甩锅吗?并不是,只是为了使故事可以套到署理模式上。我们先看一下署理模式的界说: * 为其他工具提供一种署理,以节制对这个工具的会见。(Provide a surrogate or placeholder for another object to control access to it)

比较界说,码农小张可以映射为其他工具,产物司理小李为小张的署理。我们通过JAVA代码,表述上面事例。

静态署理

1.抽象脚色

基于面向工具的思想,首先界说一个码农接口,它有一个实现用户需求的要领。

java; gutter: true">public interface ICoder {

    public void implDemands(String demandName);

}

2.真实脚色

我们假设小张是JAVA措施员,界说一个JAVA码农类,他通过JAA语言实现需求。

java; gutter: true">public class JavaCoder implements ICoder{

    private String name;

    public JavaCoder(String name){
        this.name = name;
    }

    @Override
    public void implDemands(String demandName) {
        System.out.println(name + " implemented demand:" + demandName + " in JAVA!");
    }
}

3.署理脚色

委屈一下产物司理,将其定名为码农署理类,软件开发,同时让他实现ICoder接口。

public class CoderProxy implements ICoder{

    private ICoder coder;

    public CoderProxy(ICoder coder){
        this.coder = coder;
    }

    @Override
    public void implDemands(String demandName) {
        coder.implDemands(demandName);
    }
}

上面一个接口,两个类,就实现了署理模式。Are you kidding me?这么简朴?是的,就是这么简朴。 我们通过一个场景类,模仿用户找产物司理增加需求。

public class Customer {

    public static void main(String args[]){
        //界说一个java码农
        ICoder coder = new JavaCoder("Zhang");
        //界说一个产物司理
        ICoder proxy = new CoderProxy(coder);
        //让产物司理实现一个需求
        proxy.implDemands();
    }
}

运行措施,功效如下:

Zhang implemented demand:Add user manageMent in JAVA!

产物司理充当了措施员的署理,客户把需求汇报产物司理,并不需要和措施员打仗。看到这里,有些机警的措施员发明白问题。你看,产物司理就把客户的需求传达了一下,怪不得我看产物司理这么不爽。

产物司理虽然不可是传达用户需求,他尚有许多工作可以做。好比,该项目抉择不接管新增成果的需求了,对修CoderProxy类做一些修改:

public class CoderProxy implements ICoder{

    private ICoder coder;

    public CoderProxy(ICoder coder){
        this.coder = coder;
    }

    @Override
    public void implDemands(String demandName) {
        if(demandName.startsWith("Add")){
            System.out.println("No longer receive 'Add' demand");
            return;
        }
        coder.implDemands(demandName);
    }
}

这样,当客户再有增加成果的需求时,产物司理就直接谢绝了,措施员无需再对这部门需求做过滤。

总结

我们对上面的事例做一个简朴的抽象:

说说 JAV 劳务调派信息打点系统 A 代理模式

署理模式包括如下脚色:

  • Subject:抽象主题脚色。可以是接口,也可以是抽象类。
  • RealSubject:真实主题脚色。业务逻辑的详细执行者。
  • ProxySubject:署理主题脚色。内部含有RealSubject的引用,认真对真实脚色的挪用,并在真实主题脚色处理惩罚前后做预处理惩罚和蔼后事情。
  • 署理模式利益:

  • 职责清晰 真实脚色只需存眷业务逻辑的实现,非业务逻辑部门,后期通过署理类完成即可。
  • 高扩展性 不管真实脚色如何变革,由于接口是牢靠的,署理类无需做任何窜改。
  • 动态署理

    前面讲的主要是静态署理。那么什么是动态署理呢?

    假设有这么一个需求,在要领执行前和执行完成后,打印系统时间。这很简朴嘛,非业务逻辑,只要在署理类挪用真实脚色的要领前、后输出时间就可以了。像上例,只有一个implDemands要领,这样实现没有问题。但假如然实脚色有10个要领,那么我们要写10遍完全沟通的代码。有点追求的码农,必定会对这种要领感想很是不爽。有些机警的小同伴大概想到了用AOP办理这个问题。很是正确。岂非AOP和动态署理有什么干系?没错!AOP用的恰恰是动态署理。