Adapter 模式的小例子以及分析

来源:互联网 发布:中岛美嘉长相知乎 编辑:程序博客网 时间:2024/05/01 11:22

Adapter 模式的小例子以及分析

[java] view plaincopyprint?
  1. package com.eric.interfaceAndInnerClass;  
  2.   
  3. /** 
  4.  * Apply 类主要处理Process类型的方法,在下面的UperStringProcess,LowerStringProcess 
  5.  * 由于实现了Process的借口所以理所当然的会被Apply的处理 
  6.  * NumberOperator借口的子类由于并没有显示process借口,所以其子类是不能被Apply方法所调用,而通常情况下类似于NumberOperator这样的类往往是库函数定义好的,我们也不能去更改, 
  7.  * 这个时候如果想让其被Apply类处理的话,Adapter模式就发挥其作用了,具体请康NumberAdapter类 
  8.  *  
  9.  * */  
  10. public class AdapterPartner {  
  11.     public static void main(String[] args) {  
  12.         String str = "I Come From Chinses";  
  13.         Process uperStr = new UperStringProcess();  
  14.         Process lowStr = new LowerStringProcess();  
  15.         Apply.Process(uperStr, str);  
  16.         Apply.Process(lowStr, str);  
  17.           
  18.         NumberOperator noAdd = new AddNumber();  
  19.         NumberOperator noSub = new SubNumber();  
  20.           
  21.         NumberAdapter naAdd = new NumberAdapter(noAdd);  
  22.         NumberAdapter naSub = new NumberAdapter(noSub);  
  23.           
  24.         Apply.Process(naAdd, "numer add:");  
  25.         Apply.Process(naSub, "numer sub:");  
  26.           
  27.     }  
  28. }  
  29.   
  30. interface Process {  
  31.     String name();  
  32.       
  33.     void process(Object obj);  
  34. }  
  35.   
  36. class Apply {  
  37.     static void Process(Process process, Object obj) {  
  38.         System.out.println("Class name is:" + process.name());  
  39.         process.process(obj);  
  40.     }  
  41. }  
  42.   
  43. abstract class StringProcess implements Process {  
  44.     public String name() {  
  45.         return this.getClass().getName();  
  46.     }  
  47.       
  48.     public abstract void process(Object obj);  
  49. }  
  50.   
  51. class UperStringProcess extends StringProcess {  
  52.     @Override  
  53.     public void process(Object obj) {  
  54.         System.out.println("to uper case:" + ((String) obj).toUpperCase());  
  55.     }  
  56. }  
  57.   
  58. class LowerStringProcess extends StringProcess {  
  59.     @Override  
  60.     public void process(Object obj) {  
  61.         System.out.println("to lower case:" + ((String) obj).toLowerCase());  
  62.     }  
  63. }  
  64.   
  65. class NumberAdapter implements Process{  
  66.     private NumberOperator no;  
  67.     public NumberAdapter(NumberOperator no){  
  68.         this.no=no;  
  69.     }  
  70.   
  71.     public String name() {  
  72.         return no.name();  
  73.     }  
  74.   
  75.     public void process(Object obj) {  
  76.         no.process(obj);  
  77.     }  
  78.       
  79. }  
  80.   
  81. interface NumberOperator {  
  82.     int numbe1  = 10;  
  83.     int number2 = 5;  
  84.       
  85.     String name();  
  86.       
  87.     void process(Object obj);  
  88. }  
  89.   
  90. class AddNumber implements NumberOperator {  
  91.     public String name() {  
  92.         return "two number added!";  
  93.     }  
  94.       
  95.     public void process(Object obj) {  
  96.         System.out.println(obj);  
  97.         System.out.println(numbe1 + number2);  
  98.     }  
  99. }  
  100.   
  101. class SubNumber implements NumberOperator {  
  102.     public String name() {  
  103.         return "two number sub!";  
  104.     }  
  105.       
  106.     public void process(Object obj) {  
  107.         System.out.println(obj);  
  108.         System.out.println(numbe1 - number2);  
  109.     }  
  110. }  


0 0
原创粉丝点击