设计模式系列2---幕后黑手的代理模式

今天我们来说说那个代理模式,他的一大功效就是成了挡子弹的人,代替幕后黑手出来干活。
为何这么说呢?
因为人如其名,代理,就是中间人代理商这样的,
我们不用过问到底背后怎么做,只需要找到这个代理人,他可以帮我们搞定所有。

假设有这么一个人,他可以制造茶叶蛋,炸弹,手枪,火箭,电脑病毒等等。嗯,是个人才。
现在他突然手头紧了,想找个朋友帮他看有没什么门路,卖点东西出去,但为了给自己留点后路,他就同他朋友说他会做茶叶蛋,是个十分正经的守法好人民,同时希望帮他卖一点,虽然这朋友并不知道他如意算盘背后是给他背后做的事业提供资金来源。

所以这个天才高手,我们的就这么设计了:

public class Genius implements KnowFunction {

    private void makeBomb() {
        System.out.println(" i can make a bomb");
    }

    private void makeRocket() {
        System.out.println(" i can make a rocket");
    }

    private void makeVirus() {
        System.out.println(" i can make a virus");
    }

    private void makeGun() {
        System.out.println(" i can make Gun");
    }

    @Override
    public void makeEgg() {
        System.out.println(" i can make a egg");
    }
}

对于只想让他好朋友知道的功能,他抽出来成一个单独的接口,里面只放想让他朋友知道的内容,例如说只想让他好朋友知道他只是一个做茶叶蛋的普通人士。

public interface  KnowFunction {
     public void makeEgg() ;
}

接着,是时候让他的好朋友知道他是一个只会做茶叶蛋的人了,所以给他朋友加多了这个接口。
告诉他朋友,如果有人找你要茶叶蛋,你就召唤我们一声!我立马给你做

public class MyFriend implements KnowFunction {

    Genius genius = new Genius();

    @Override
    public void makeEgg() {
        genius.makeEgg();
    }
 }

这样下次如果有那个土豪找他的这个朋友说要来点蛋的时候,他就叫这个天才去做一点茶叶蛋出来。

public class RichRichOne {

    public static void main(String[] args) {

        MyFriend friend = new MyFriend();
        friend.makeEgg();
    }
}

好了,就像上面这个一样,我们的RichRich土豪成功的召唤了他的朋友,然后叫他找点茶叶蛋吃。
但他并不知道这个蛋出自一个天才之手,而且用他卖茶叶蛋的钱去支持了自己的“副业”
各取所需,大家相安无事。一个挺好的结局的。

热评文章