日期:2014-05-20  浏览次数:20628 次

马上结贴,写三句半代码实现适配器模式,大家看看对不对??
Java code
package myTable;

import java.util.ArrayList;

interface IStack{
   void push(int a);
   void pop();
   int getPeak();
}

public class ObjectAdapter implements IStack{
   ArrayList adaptee;
   public void push(int a){
      adaptee.add(a);
   }
   
   public void pop(){
      adaptee.remove(adaptee.size()-1);
   }
   
   public int getPeak(){
      return (Integer) adaptee.get(adaptee.size()-1);
   }
}


------解决方案--------------------
除了adaptee没初始化,形象。
我的理解就是适配器就是2个不同组件之间连接。
------解决方案--------------------
挺形象的了..

不过我更喜欢将适配器定义成抽象类..
------解决方案--------------------
适配者模式将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份.
你这里Adaptee为IStack,Adaptor为ObjectAdapter,属于适配者模式中的对象适配器。这样写没有问题。
------解决方案--------------------
2.为什么要用抽象类:   

此类是不要被实例化的。而只充当适配器的角色,也就为其子类提供了一个共同的接口,但其子类又可以将精力只集中在其感兴趣的地方。 


摘自 适配器模式 from百度百科

------------------------------------------------------

我觉得是个人理解不同,因为我认为的适配器模式是实现了一个接口的所有方法的抽象类,

而这样的类用户在使用的时候就可以专注的实现自己需要的方法,而不用像继承接口的那样需要实现所有方法。

如:

Java code

interface athlete{
   void run();
   void swim();
   void dive();
}

public abstract class athleteAdapter implements athlete{

   public void run(){
   }   
   public void swim(){
   }  
   public void dive(){
   }
}

class athletes extends athleteAdapter{
    public void run(){
        System.out.println("Start running!");
    }
}
class swimmer extends athleteAdapter{
    public void swim(){
        System.out.println("Start swimming!");
    }
}
class diver extends athleteAdapter{
    public void dive(){
        System.out.println("Start diving!");
    }    
}

------解决方案--------------------
7楼的看起来更一目了然
------解决方案--------------------
学习学习!
------解决方案--------------------
学习ing
------解决方案--------------------
组合优先于继承