委托模式,就是一个类将部分功能(也可以是全部功能)委托给另一个类
比如一个机器人(Person),可以说(speak)也可以听(hear)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 interface  SpeakDelegate  { void  speak (String text) ; }interface  HearDelegate  { void  hear (String text) ; }   class  Robot  {    SpeakDelegate speakDelegate;     HearDelegate  hearDelegate;     void  speak (String text)  { speakDelegate.speak(text); }     void  hear (String text)  { hearDelegate.hear(text); } } class  MyRobotBehaviour  implements  SpeakDelegate , HearDelegate {    String  name  =  'Jack' ;     void  speak (String text)  {         System.out.format('My name is %s. I speak %s\n' , name, text)     }        void  hear (String text)  {         System.out.format('My name is %s. I hear %s\n' , name, text)     } } Robot  robot  =  new  Robot ();MyRobotBehaviour  myRobotBehaviour  =  new  MyRobotBehaviour ()robot.speakDelegate = myRobotBehaviour; robot.hearDelegate  = myRobotBehaviour; 
当然也可以全权委托,看起来和代理类似,但代理一般是不能变更被代理的对象的,而委托可以修改委托对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 interface  RobotDelegate  { void  speak (String text) ; void  hear (String text) ; }   class  Robot  {    RobotDelegate delegate;     void  speak (String text)  { delegate.speak(text); }     void  hear (String text)  { delegate.hear(text); } } class  MyRobotBehaviour  implements  RobotDelegate  {    String  name  =  'Jack' ;     void  speak (String text)  {         System.out.format('My name is %s. I speak %s\n' , name, text)     }        void  hear (String text)  {         System.out.format('My name is %s. I hear %s\n' , name, text)     } } Robot  robot  =  new  Robot ();MyRobotBehaviour  myRobotBehaviour  =  new  MyRobotBehaviour ()robot.delegate = myRobotBehaviour; 
2022-12-04