android深入之设计模式(一)委托模式

(一)委托模式简介

委托模式是基本的设计模式之一。委托,即是让另一个对象帮你做事情。

许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式。

委托模式使得我们可以用聚合来替代继承,java-组合优于继承

最简单的java委托模式

class RealPrinter {
    void print() {
        System.out.println("real printer");
    }
 }

class Printer {
     RealPrinter realPrinter = new RealPrinter();

     public void print() {
        realPrinter.print();
     }
}
/**
 * 简单委托模式
 *
 * @author peter_wang
 * @create-time 2014-5-19 下午5:39:42
 */
public class DelegationDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Printer printer = new Printer();
        printer.print();
    }

}

(二)android中的委托模式

android中的listerner事件即是委托模式,比如Button点击事件。我们来模拟整个点击事件是如何运用委托模式的。

/**
 * 模拟基本View
 *
 * @author peter_wang
 * @create-time 2014-5-19 下午5:03:55
 */
public class View {

    private OnClickListener mOnClickListener;

    /**
     * 模拟点击事件
     */
    public void clickEvent() {
        if (mOnClickListener != null) {
            mOnClickListener.onClick(this);
        }
    }

    public void setOnClickListener(OnClickListener onClickListener) {
        this.mOnClickListener = onClickListener;
    }

    /**
     * 点击事件接口
     *
     * @author peter_wang
     * @create-time 2014-5-19 下午5:05:45
     */
    public interface OnClickListener {
        public void onClick(View v);
    }
}
/**
 * 模拟按钮
 *
 * @author peter_wang
 * @create-time 2014-5-19 下午5:17:57
 */
public class Button
    extends View {

}
/**
 * 模拟基本Activity类
 *
 * @author peter_wang
 * @create-time 2014-5-19 下午5:20:38
 */
public class Activity {

    public static void main(String[] args) {
        Activity activity = new Activity();
        activity.onCreate();
    }

    /**
     * 模拟OnCreate方法
     */
    protected void onCreate() {

    }

}
/**
 * 委托模拟页面
 *
 * @author peter_wang
 * @create-time 2014-5-19 下午5:19:22
 */
public class DelegationActivity
    extends Activity
    implements OnClickListener {

    private Button mButton;

    @Override
    protected void onCreate() {
        super.onCreate();
        mButton = new Button();
        mButton.setOnClickListener(this);

        // 模拟点击事件
        mButton.clickEvent();
    }

    @Override
    public void onClick(View v) {
        if (v == mButton) {
            System.out.println("onClick() is callback!");
        }
    }

}

android深入之设计模式(一)委托模式,布布扣,bubuko.com

时间: 2025-01-13 02:03:29

android深入之设计模式(一)委托模式的相关文章

iOS.常用设计模式.02.委托模式

WTDelegate #import <Foundation/Foundation.h> @protocol WTDelegate <NSObject> @required - (void)sleep; - (void)eat; - (void)work; @end WTPhilosopher.h #import <Foundation/Foundation.h> #import "WTDelegate.h" @interface WTPhiloso

PHP设计模式系列 - 委托模式

委托模式 通过分配或委托其他对象,委托设计模式能够去除核心对象中的判决和复杂的功能性. 应用场景 设计了一个cd类,类中有mp3播放模式,和mp4播放模式 改进前,使用cd类的播放模式,需要在实例化的类中去判断选择什么方式的播放模式 改进后,播放模式当做一个参数传入playList函数中,就自动能找到对应需要播放的方法. 代码:cd类,未改进之前,选择播放模式是一种痛苦的事情 <?php //委托模式-去除核心对象中的判决和复杂的功能性 //使用委托模式之前,调用cd类,选择cd播放模式是复杂的

php设计模式之委托模式

使用委托模式目的是消除潜在的.难以控制的if/else语句. <?php /** * 原来的程序写法 * @var playlist */ $playlist = new playlist(); $playlist->addSong('/home/aaron/music/aa.mp3', 'Brr'); $playlist->addSong('/home/aaron/music/bb.mp3', 'GoodBye'); if ($extType == 'pls') { $playlist

iOS常用设计模式之委托模式

委托模式在Cocoa Touch框架和Cocoa框架中都有很多的应用.例如在应用启动的时候需要的一个类:UIApplication.在程序的入口函数main函数里面: int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([WBAppDelegate class])); } } UIApplication的方法UIAppl

设计模式之委托模式

一:概念 一个对象接收到了请求,但是自己不处理,交给另外的对象处理,就是委托模式,例如 老板接到了活, 然后把活转手给了工人去做. 二:示例 创建一个类IReceiveTask,代表接收任务的动作 public interface IReceiveTask { void receive(String task); } 创建一个类BossService,老板可以接收任务,并且可以命令工人 public class BossService implements IReceiveTask{ priva

Android中的设计模式-工厂方法模式

简单工厂&工厂方法 一直以来总是分不清简单工厂,工厂方法,抽象工厂这三个设计模式的区别,倒不是不理解其区别,而是总是记忆混淆,傻傻分不清楚,所以再重新总结一下区别,并记录下来,下次再混淆时,可以拿出来看看.这节先说简单工厂和工厂方法,下一节再说抽象工厂. 工厂方法中其实就包含了简单工厂,简单工厂也称为静态工厂方法, 简单工厂模式(Simple Factory) 类图 简单工厂模式又称为静态工厂方法模式,是工厂方法模式的一种,简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产

Android中的设计模式-抽象工厂模式

抽象工厂模式(Abstract Factory) 先上类图吧,自己懒得画了,找了个现成的 抽象工厂的引入是根据需求而产生的,说到这里先要提到一个名字-产品族(Product Family),还是以生产汽车为例,我想要一个上汽的汽车工厂能够同时生产一款MPV,一款SUV和一款Sedan,那比如说它就是上海通用别克的工厂啦,可以生产MPV GL8,生产SUV 昂科威,可以生产Sedan 君威,这几款产品就算是一个产品族.作为公司高层,肯定是希望工厂能够有能力同时生产这三款车,将这个工程抽象出来,就成

《Android源码设计模式》--模板方法模式

No1: 模板方法模式包括:抽象类(其中定义了一系列顺序方法).具体实现类A.具体实现类B 如果子类有实现不一样的细节,重写父类的某个方法即可 No2: AsyncTask对象调用execute方法后会依次执行onPreExecute.doInBackground.onPostExecute或onProgressUpdate. 每次使用AsyncTask时都需要重新创建一个对象 No3: execute方法内部封装了onPreExecute.doInBackground.onPostExecut

iOS设计模式-委托模式

委托是指给一个对象提供机会对另一对象中的变化做出反应或者相应另一个对象的行为.其基本思想是协同解决问题. 在程序中:一般情况下 1.委托需要做的工作有: 1.1定义协议与方法 1.2声明委托变量 1.3设置代理 1.4通过委托变量调用委托方法 2.代理需要做的工作有: 2.1遵循协议 2.2实现委托方法 下面讲解一下使用委托实现页面传值的解决方法: 加入我们有两个ViewController 分别为:ViewController和 TrendViewController 一 .需求: 我们要实现

《Android源码设计模式》--策略模式

No1: 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. No2: 使用场景: 1)针对同一类型问题的多种处理方式,仅仅是具体行为有差别时 2)需要安全的封装多种同一类型的操作时 3)出现同一抽象类有多个子类,而又需要使用if-else或者switch-case来选择具体子类时 No3: TimeInterpolator时间插值器的作用是根据时间流逝的百分比来计算出当前属性值改变的百分比,系统预置的有 1)线性插值