中介公司的故事(一)-Java静态代理

小育是国内某省会城市211流大学毕业的计算机系学生。毕业后通过中介钟么办在一个叫链表家的中介公司租到了房子。链表家的老板肖坡廉想把这中介公司发展成一家互联网中介公司。租房子的时候看上了小育计算机系毕业的文凭,于是把他招到链表家当程序员,这样小育成了链表家第一位程序员。上班第一天,小育遇见了当时帮他租房子的中介钟末办,钟末办一脸惆怅的说:“我房子卖的好好的,就因为我以前是计算机系毕业的,老板非要让我来当什么产品经理,工资是高了点,提成全没了。最近楼市这么火,这不是坑我吗”?“小育你先给寡人写一个简单的租房子的程序”。“这个问题很简单”小育自信的回答道。经理说:“do not blind BB, show me the code”

HouseOwner.java

public class HouseOwner {

     

      private String name;

     

      public HouseOwner  (String name){

            this.name = name;

      }

      //房屋出租

      public void rent(){

            System.out.println("租得"+name+"的房屋。");

      }

}

 

Client.java

public class Client {

 

      public static void main(String[]  args) {

            HouseOwner  houseOwner = new HouseOwner ("房主");

            //客户通过自己,租的房主的房屋。

            houseOwner .rent();

      }

 

}

 

运行结果:      

租得房主的房屋。

 

                经理看完代码后,有点疑惑的说“小育啊,我总觉得这代码哪里有问题,但是我大学计算机也总挂科,HelloWorld都只能写一半。所以才来搞中介的。我们先跑跑看”。过了几天,中介公司隔壁的老王来了,老王想出租他自己的电影院。经理跑急忙过来来找小育,“小育给写个出租电影院的程序呗”。小育于是很淡定的添加了一个类CinemaOwner.java.

CinemaOwner.java

public class CinemaOwner {

     

      private String name;

     

      public CinemaOwner  (String name){

            this.name = name;

      }

      //房屋出租

      public void rent(){

            System.out.println("租得"+name+"的电影院。");

      }

}

 

Client.java

public class Client {

 

      public static void main(String[]  args) {

            CinemaOwner cinemaOwner = new Landlord("老王");

           

            cinemaOwner.rent();

      }

 

}

 

运行结果:      

租得老王的电影院。

 

                看到那么容易就实现了,经理说:“貌似代码也没啥问题,看来是老夫多虑了”。

                用了处理出租的软件,链表家的生意越来越好有来出租土地(LandOwner)的,热水器(HeaterOwner)的,车辆(VehicleOwner)的,女朋友(GirlFriendOwner)的,猫猫(CatOwner)的,狗狗(DogOwner)的等等。小育应对每一种想出租商品的人,都建立了一个*Owner类。而在链表家出租的商品也超过了10000种,小育创建了10000个类来应对。老板一开心,把脸笑烂了,送到医院抢救去了。老板在救护车上,紧紧的拉着经理和小育的手说,“我们要提升服务质量,以后凡是出租的商品我们要先带客户检查商品,再出租,这样会减少很多客户的投诉”。经理紧紧握住肖老板的手,但心里却走了神,说道“老板您就放心吧,我们会照顾好老板娘的,不是,提高客户满意度的”。老板紧握着的手,松了,顺着嘴角白沫流了出来。经理并没有理会这事情,他意识到了他之前觉得不对劲的代码问题出在哪里了。他苦笑着对小育说:“现在我们在代码里挖的坑要我们自己跳了,你准备肿么办,跳槽还是跳坑?”。小育说:“填了坑在跳槽吧,你都把老板气这样了,我回去加几天班把那10000*Owner类里都加上检验商品的逻辑就可以了啊”。经理又说:“那明天老板要求凡是美女租东西送小礼品的呢,后天老板又说每一个客户租东西可以积分呢?每一个需求都会导致你10000处的修改。老板那么奇葩,什么要求提说不出口,以后我们的商品不再是10000种,而是1000000种了呢,一个小需求引发1000000处的修改?我们必须找一个简单的方法,对这类提高服务品质的需求,一个需求一处修改。因为我觉得老板应该还是能活到明天的。”

  • 使用代理

小育扶了扶眼镜说道:“我们把租东西,检查待租商品,送美女送礼品这些方法进行分类,哪些是公用方法任何人都可以做的,哪些是只有商品持有者才能做”?经理说:“除了租房,其他方法都不需要商品持有者参与”。小育笑了起来:“这就好办了,那我们把这些公共方法都交给一个代理类Agency来做”。“那私有的方法肿么办,只有*Owner类才正真持有这些商品啊,Agency没办法做啊?”经理还有些疑惑。“这个简单,再让*Owner类和Agency都实现一个Rentable的接口,这样Agency就可以帮*Owner租房子了”。“以后老板任何奇葩的需求,我们都只需要修改Agency的代码就可以实现,在也不用为这破事犯难了”小育解释道。“多说无益,showme the code”,经理说。

Rentable.java

public interface Rentable {

      public void rent();

}

 

HouseOwner.java

public class HouseOwner implements Rentable {

 

     

      private String name;

     

      public HouseOwner  (String name){

            this.name = name;

      }

      //房屋出租

      public void rent(){

            System.out.println("租得"+name+"的房屋。");

      }

 

}

 

CinemaOwner.java

public class CinemaOwner implements Rentable{

     

      private String name;

     

      public CinemaOwner  (String name){

            this.name = name;

      }

      //电影院出租

      public void rent(){

            System.out.println("租得"+name+"的电影院。");

      }

}

 

Agency.java

public class Agency implements Rentable{

     

      private Rentable renter;

     

      @Override

      public void rent() {

           

            System.out.println("中介无微不至的带你检查待租商品。");

            //老板的任何奇葩要求只需在这里加一句就轻松搞定

            // System.out.println("美女租东西,送小礼品");

 

 

           

            renter.rent();

           

            System.out.println("中介高冷的收取了高额中介费。");

      }

     

      public Rentable  getRenter() {

            return renter;

      }

 

      public void setRenter(Rentable  renter) {

            this.renter = renter;

      }

 

      public  Agency(Rentable renter){

            this.renter = renter;

      }

     

}

 

Client.java

public class Client {

 

      public static void main(String[]  args) {

           

            Rentable cinemaOwner = new CinemaOwner("老王");

           

            Rentable houseOwner = new HouseOwner("全大哥");

           

            Agency agenty = new  Agency(cinemaOwner);

           

            agenty.rent();

           

            System.out.println("=========华丽的分割线===============");

           

            agenty.setRenter(houseOwner);

           

           

            agenty.rent();

           

      }

 

}

 

输出结果:

中介无微不至的带你检查待租商品。

租得老王的电影院。

中介高冷的收取了高额中介费。

=========华丽的分割线===============

中介无微不至的带你检查待租商品。

租得全大哥的房屋。

中介高冷的收取了高额中介费。

 

这下经理和小育都送了一口气,今后对于任何公共方法的添加和修改都不用修改那10000个*owner类中做修改了,在Agency类中做一处修改就可以了。小育决定再给他这种设计方式配一张图,看起来就会更加清晰。经理开心的说道:“我们给这个伟大编程的方式取个名字吧,然后再去吃个烧烤庆祝下”。小育说“既然我们是用中介代理的方式分离了公共业务和私有业务,那我们就叫它代理模式吧”。经理说,“这样取名字会不会太过牵强”?小育说:“哪能啊,文章题目不就这么取的吗?”

代理模式

在小育和钟经理的努力下。链表家的生意也越来越红火。通过他们出租的商品从10000种到50000种,而这程序也没出问么大问题。肖老板又一次把脸笑开了花,去医院缝针去了。特地交代一人发2万元奖金,奖励他们对公司的贡献。链表家的故事就这样结束了吗?肖老板内心的狂野,远远没有我们想象的那么温柔。他决定进军其它行业。(未完待续)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值