• 第七章-复用类-代理


    练习11:(3)修改 Detergent.java,让它使用代理。

    一:我的答案:

     1 package com.learnJava.test;
     2 
     3 /**
     4  * @Author zhuchangli
     5  * @Date 2019/9/15
     6  **/
     7 public class DetergentDelegation {
     8 
     9     private Cleanser cleanser = new Cleanser();
    10     private String s = "Cleanser ";
    11     public void scrub(){
    12         cleanser.append(" Detergent.scrub()");
    13         cleanser.scrub();
    14     }
    15 
    16     public void append(String a){
    17         cleanser.append(a);
    18     }
    19 
    20     public void dilute(){
    21         cleanser.dilute();
    22     }
    23 
    24     public void apply(){
    25         cleanser.applay();
    26     }
    27 
    28     public void foam(){
    29         append("foam()");
    30     }
    31 
    32     public String toString(){
    33         return cleanser.toString();
    34     }
    35 
    36    public static void main(String [] args){
    37         DetergentDelegation d = new DetergentDelegation();
    38         d.dilute();
    39         d.apply();
    40         d.scrub();
    41         d.foam();
    42         System.out.println(d);
    43         System.out.println("Testing base class");
    44         Cleanser.main(args);
    45 
    46    }
    47 }

    运行结果:

    Cleanserdilute()applay() Detergent.scrub()scrub()foam()
    Testing base class
    Cleanserdilute()applay()scrub()

    使用继承时:

     1 package com.learnJava.test;
     2 
     3 /**
     4  * @Author zhuchangli
     5  * @Date 2019/9/14
     6  **/
     7 class Cleanser{
     8     private String s = "Cleanser";
     9     public void append(String a) { s += a; }
    10     public void dilute(){ append("dilute()"); }
    11     public void applay(){append("applay()");}
    12     public void scrub(){append("scrub()");}
    13     public String toString(){return s;}
    14 
    15     public static void main(String [] args){
    16         Cleanser x = new Cleanser();
    17         x.dilute();
    18         x.applay();
    19         x.scrub();
    20         System.out.println(x);
    21     }
    22 }
    23 //洗涤剂
    24 public class Detergent extends Cleanser{
    25     public void scrub(){
    26         append("Detergent.scrub()");
    27         super.scrub();
    28     }
    29 
    30     // foam 泡沫
    31     public void foam(){ append("foam()");}
    32 
    33     public static void main(String [] args){
    34         Detergent x = new Detergent();
    35         x.dilute();
    36         x.applay();
    37         x.scrub();
    38         x.foam();
    39         System.out.println(x);
    40         System.out.println("Testing base class");
    41         Cleanser.main(args);
    42     }
    43 }

    运行结果:

    Cleanserdilute()applay()Detergent.scrub()scrub()foam()
    Testing base class
    Cleanserdilute()applay()scrub()

    二:参考答案

     1 package com.learnJava.test;
     2 
     3 /**
     4  * @Author zhuchangli
     5  * @Date 2019/9/15
     6  **/
     7 
     8 class Cleanser11{
     9     private String s = "Cleanser11";
    10     public void append(String a) { s += a;}
    11     public void dilute() {append(" dilute()");}
    12     public void apply() {append(" apply()");}
    13     public void scrub() {append(" scrub()");}
    14     public String toString() {return s;}
    15 
    16     public static void main(String [] args){
    17         Cleanser11 x = new Cleanser11();
    18         x.dilute();
    19         x.apply();
    20         x.scrub();
    21         System.out.println(x);
    22     }
    23 }
    24 
    25 public class DetergentDelegation11 {
    26 
    27     private String s = "DetergentDelegation11 ";
    28     private Cleanser11 c11 = new Cleanser11();
    29 
    30     public void append(String a){
    31         s += a;
    32     }
    33 
    34     public void dilute(){
    35         c11.dilute();
    36     }
    37 
    38     public void apply() {c11.apply();}
    39 
    40     public void scrub() {
    41         append("DetergentDelegation11");
    42         c11.scrub();
    43     }
    44 
    45     public void foam(){
    46         append(" foam()");
    47     }
    48 
    49     public String toString(){
    50         return s + " " + c11;
    51     }
    52 
    53     public static void main(String [] args){
    54         DetergentDelegation11 d = new DetergentDelegation11();
    55         d.dilute();
    56         d.apply();
    57         d.scrub();
    58         d.foam();
    59         System.out.println(d);
    60         System.out.println("Testing base class");
    61         Cleanser11.main(args);
    62     }
    63 
    64 
    65 }

    运行结果:

    DetergentDelegation11 DetergentDelegation11 foam() Cleanser11 dilute() apply() scrub()
    Testing base class
    Cleanser11 dilute() apply() scrub()

    总结:

    代理是什么:

    将一个成员置于所要构造的类中,在新类中暴露了该成员对象的所有方法。

    只提供在成员对象的方法的某个子集。

  • 相关阅读:
    easyui datagrid fit 属性
    jQuery outerHeight() 方法
    从文件夹输入数据到控制台程序 c方式
    排序算法
    泛型算法
    string、char[]、char*、const char* 相互转换
    sizeof
    容器 forward_list
    sort
    printf & sprintf
  • 原文地址:https://www.cnblogs.com/changlili/p/11525016.html
Copyright © 2020-2023  润新知