Java设计模式(三)之 代理模式

开始啦

    说代理模式之前先说一下什么是代理,举个例子:房主,房屋中介这两者之间的关系,房主想把自己的房子租出去,但是他不想在租房子这件事上用太多精力,所以他把房子交给了房屋中介,房主就什么都不管了,剩下的都交给中介,房东不需要直接接触租户就可以把房子租出去,这种情况下,房屋中介就相当于代理。

    总结一下,代理就是可以帮助用户将所有的开发注意力集中在核心业务功能上,其他什么都不用考虑,就上面例子来讲,房东的核心业务就是想把房子租出去,至于租房子怎样打广告,或是带租户去看房,他都不用考虑,只要一个结果就是把房子租出去。

1、在项目中的应用场景

    在直接访问对象时带来的问题。可能直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。

2、应用实例

    Windows的快捷方式、spring aop等

3、优缺点

    优点:1、职责清晰。 2、高扩展性。 3、智能化。

    缺点:1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

4、代码实现

    就拿上面的房主和房屋中介来说吧

    准备:


    public interface IHouseOwner {

        public void rentHouse();

    }

    房主类:

    public class HouseOwner implements IHouseOwner {

        @Override

        public void rentHouse() {

            //房东最想要的结果

           System.out.println("***房子租出去***");

        }

    }

    房屋中介类:

    public class HouseProxy implements IHouseOwner{

        private IHouseOwner houseOwner;

        //HouseProxy主要就是为HouseOwner服务的

        public HouseProxy(IHouseOwner houseOwner) {

            this.houseOwner = houseOwner;

        }

        @Override

        public void rentHouse() {

            //中介对于房子的其他操作,房主不需要考虑的

             operation();

            //这个是房主最关心的结果,就是房子租出去,其他他都不关注

            houseOwner.rentHouse();

        }

        //这个是房屋中介的其他操作,例如宣传,带租户看房等

       public void operation() {

            System.out.println("**宣传房子**");

            System.out.println("**带客户看房子**");

        }

    }

    测试类:

    public class Test {

        public static void main(String[] args) {

            IHouseOwner houseOwner = new HouseProxy(new HouseOwner());

            houseOwner.rentHouse();

        }

    }

    总结:代理模式的主要特点是一个接口提供有两个子类,其中一个子类是真实业务操作,另一个是代理业务操作,没有代理业务操作,真实业务无法进行。如上面的例子,真实业务操作是房主他有一个自己的真实的房源,代理业务是指房屋中介类他负责代理操作房主的房子。

结束啦

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。