这使用什么模式?

时间:2017-03-30 02:23:13

标签: android design-patterns

为了在ListView的onScroll事件中添加一些行为,我按子类ListView添加了一些代码:

class MyListView extends ListView{
      public void setOnScrollListener(OnScrollListener listener){
            final OnScrollListener lis = new OnScrollListener(){
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                listener.onScrollStateChanged(view, scrollState);
                //below is added behavior of my Listview
                }
            }

        super.setOnScrollListener(lis);
      }
}

并且使用它很简单:

MyListView myList = new MyListView(...);
myList.setOnScrollListener(new OnScrollListener(){...});//here is the old logic

这听起来像Decorator模式,但它不是,因为没有复合但只有继承(事实上我不需要复合)。

所以问题是我该怎么称呼它?

3 个答案:

答案 0 :(得分:2)

这不是Gang of Four Design Pattern。您只是使用inheritance来扩展功能。

答案 1 :(得分:2)

只是OOP概念扩展ListView类以获取其功能,不能被视为装饰器设计模式

我们使用Decorator设计模式在运行时添加/修改对象的功能。

装饰器设计模式由四个组成部分组成:

<强> 1。组件接口

示例

   public interface Car 
   {       
      public void assemble(); 
   }

<强> 2。组件实施

实施例

public class BasicCar implements Car
{
    @Override     
    public void assemble() 
    {         
       System.out.print("Basic Car.");     
    } 
}

第3。装饰

实施例

public class CarDecorator implements Car 
{       
    protected Car car;           
    public CarDecorator(Car c)
    {         
        this.car=c;     
    }           

    @Override     
    public void assemble() 
    {         
         this.car.assemble();     
    }   
} 

第3。混凝土装饰

实施例

 // Adding feature at runtime using decorator pattern to SportsCar
 public class SportsCar extends CarDecorator 
 {
      public SportsCar(Car c) 
      {         
          super(c);     
      }

       @Override     
       public void assemble()
       {         
          car.assemble();
           System.out.print(" Adding features of Sports Car."); 
       }
 }

 // Adding feature at runtime using decorator pattern to LuxuaryCar
 public class LuxuaryCar extends CarDecorator 
 {
      public LuxuaryCar(Car c) 
      {         
          super(c);     
      }

       @Override     
       public void assemble()
       {         
          car.assemble();
           System.out.print(" Adding features of Luxuary Car."); 
       }
 } 

如何使用?

Car sportsCar = new SportsCar(new BasicCar());         
sportsCar.assemble(); 

上面我们使用Decorator Design Pattern

在运行时向BasicCar添加跑车功能

答案 2 :(得分:1)

它被称为 继承 。如果您还不知道,这是一个OOP概念。