这个帖子中谈谈依赖原理的高级原理和使用技巧。一、依赖原理的高级原理
   1.A依赖B可转化为B依赖A
     
     符号表示为:A --> B   ==>   B ---> A    哪个依赖哪个,这个其实跟规则的制定者有关系;同样拿邮局寄信的问题来说,
    如果按照邮局接口,则我们依赖邮局,
    如果按照我们自定义接口,则邮局依赖我们;
    但是不管谁依赖谁,我们达到同样的目的,那就是把信寄出去。二、依赖原理的高级技巧    其实我们谈论的这个高级技巧,就是控制反转IOC。
    解决的问题就是相互依赖的问题,例如A --> B 同时 B ---> A
   我们可以把 A --> B 等价于  A --> IB1
          把 B ---> A 等价于 A --> IB2
    这就是说把A向B,B向A各制定一个规则转化为B向A制定两个规则;二、依赖原理的高级技巧的例子    拿我们去邮局做例子,有两个类PostOfficeMail和PostOffice如下:
     #PostOffice
    class PostOffice{
           public void sendMail( Mail mail ){
               //按照邮局制定规则,从信封上面获取目的地址
                  。
                 //发送到目的地址
                 sendThisMail.....
           }
    }
    #PostOfficeMail
    class PostOfficeMail extends Mail{
         //上面记录收件人,下面记录发件人
    }
    #Test
     class Test{
          public static void main(String []args){
              PostOffice postOffice = new PostOffice();
              Mail mail = new PostOfficeMail();
              //按照邮局规则,把收件人地址写在上面
                。
              postOffice.sendMail( mail );
          }
    }
   如果使用IOC,PostOffice将依赖Mail.
    #IDestAddress
    interface IDestAddress{
          Address getDestAddress();
    }
    #PostOffice
    class PostOffice{
           public void sendMail( Mail mail, IDestAddress destAddress){
               //使用传入的IDestAddress获取目的地址
                 Address address = destAddress.getDestAddress;
               //把地址发送到目的地
           }
    }
    #PostOfficeMail
    class MyMail extends Mail implements IDestAddress{
         //下面记录收件人,上面记录发件人,使用自己的规则
          .......
         //实现getDestAddress
         Address getDestAddress(){
              //从信封下面获取目的地址
                。。
         }
    }
    #Test
     class Test{
          public static void main(String []args){
              PostOffice postOffice = new PostOffice();
              PostOfficeMail mail = new PostOfficeMail();
              //按照邮局规则,把收件人地址写在上面
                。
               postOffice.sendMail( mail,mail );
          }
    }三、思考的问题    如果有如下同层间的依赖关系,我们该如果做?
   A --> B  B --> C  C--->A  C --->B