zoukankan      html  css  js  c++  java
  • 静态代理模式

    package 代理模式;
    /**
     * 定义一个代理类,该代理类是一个接口
     * @author lang
     *背景:代理模式就是假如C想从香港买点奶粉。可是C去不了香港。又不认识香港的朋友,C仅仅好去超市看有没有奶粉
     *此时超市就是代理,但背后并非超市跑到香港去买的奶粉,而是送货的充当了背后的角色。不多说,看代码
     */
    public interface Proxy {


    /**
    * 定义了一个代购的方法(买东西,比如从香港买奶粉回来)
    */
    public void buySomeThing();
    /**
    * 定义了一个卖东西的抽象方法
    */
    public void sellSomeThing();

    }

    //超市类

    package 代理模式;


    public class SuperMarket implements Proxy{
    private Proxy proxy;
    //这里通过构造方法传值,
    public SuperMarket(Proxy proxy){
    this.proxy = proxy;
    }
    @Override
    public void buySomeThing() {
    // TODO Auto-generated method stub
    //注意这里,并非超市真的自己去香港买东西,而是传进来的Proxy的实现类真正意义上在做的
    this.proxy.buySomeThing();
    }


    @Override
    public void sellSomeThing() {
    // TODO Auto-generated method stub
    //同上
    this.proxy.sellSomeThing();
    }


    }

    //送货员

    package 代理模式;


    public class deliveryman implements Proxy{

    //真正意义上在背后默默的做着工作的人,好辛苦呀
    @Override
    public void buySomeThing() {
    // TODO Auto-generated method stub
    System.out.println("我能够从香港带一些特产,比如XXX");
    }


    @Override
    public void sellSomeThing() {
    // TODO Auto-generated method stub
    System.out.println("我能够把这些东西送到香港卖出去");
    }


    }


    //当当当,C要去给儿子买奶粉了,走起大笑

    package 代理模式;
    /**
     * C要去超市买奶粉了,走起!。!
     * @author lang
     *
     */
    public class C {


    public static void main(String[] args) {


    SuperMarket sup = new SuperMarket(new deliveryman());
    //表面上看是调用的是超市的方法,暗地里调用的是送货员的方法,为送货员点个赞。哈哈哈。


    sup.buySomeThing();
    sup.sellSomeThing();
    }


    }

    /**

    运行代码:

    我能够从香港带一些特产。比如XXX
    我能够把这些东西送到香港卖出去

    */


    假如过了一段时间后,超市不想要送货员给他送货的,须要还有一家提供的货源,由于人家的货可能更好吧,那么怎么办呢,依旧非常ease,除了加入一个otherDeliveryman,其它的差点儿不用改

    小二,上代码。好的 看官们,这就来了偷笑

    package 代理模式;


    public class OtherDeliveryman implements Proxy{

    //真正意义上在背后默默的做着工作的人。好辛苦呀
    @Override
    public void buySomeThing() {
    // TODO Auto-generated method stub
    System.out.println("我能够从香港带一些特产,比如XXX,而且还能够给你们优惠o!!!");
    }


    @Override
    public void sellSomeThing() {
    // TODO Auto-generated method stub
    System.out.println("我能够把这些东西送到香港卖出去,而且能够给你们卖到好的价钱呦。!!");
    }


    }

    //but主类还是要改滴


    //当当当,C又要去给儿子买奶粉了,再次走起大笑

    package 代理模式;
    /**
     * C要去超市买奶粉了,走起!

    !!


     * @author lang
     *
     */
    public class C {


    public static void main(String[] args) {


    SuperMarket sup = new SuperMarket(new OtherDeliveryman());//就改这么多
    //表面上看是调用的是超市的方法,暗地里调用的是送货员的方法。为送货员点个赞,哈哈哈。


    sup.buySomeThing();
    sup.sellSomeThing();
    }


    }

    /**

    我能够从香港带一些特产,比如XXX,而且还能够给你们优惠o!!!
    我能够把这些东西送到香港卖出去,而且能够给你们卖到好的价钱呦!!


    */





















  • 相关阅读:
    一个简单XQuery查询的例子
    《Microsoft Sql server 2008 Internals》读书笔记第七章Special Storage(1)
    《Microsoft Sql server 2008 Internals》读书笔记第八章The Query Optimizer(4)
    《Microsoft Sql server 2008 Internal》读书笔记第七章Special Storage(4)
    SQL Server中SMO备份数据库进度条不显示?
    《Microsoft Sql server 2008 Internal》读书笔记第七章Special Storage(5)
    《Microsoft Sql server 2008 Internal》读书笔记第七章Special Storage(3)
    《Microsoft Sql server 2008 Internal》读书笔记第八章The Query Optimizer(2)
    省市三级联动的DropDownList+Ajax的三种框架(aspnet/Jquery/ExtJs)示例
    FireFox意外崩溃时的手工恢复命令
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/7007956.html
Copyright © 2011-2022 走看看