亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

基于Android設計模式之--SDK源碼之策略模式的詳解

2020-04-11 12:26:38
字體:
來源:轉載
供稿:網友

策略模式其實特別簡單(聽到這句話,大家是不是心里一下子放松了?)。
比如排序,官方告訴大家我這里有一個排序的接口ISort的sort()方法,然后民間各盡其能,實現這個排序的方法:冒泡,快速,堆等等。
這些方法就是“不同的策略”。
然后,某個模塊下,需要一個排序方法,但是暫時不能指定具體的sort方法(出于擴展的考慮),就需要使用ISort接口了。
最后,具體什么場景下,傳入什么具體的sort方法,實現靈活的排序。
這就是策略模式!
下面,我們分析Android中的動畫是如何使用策略模式的。

1. 意圖
定義一系列的算法,把它們一個個封裝起來,并且使它們可互相替換。
策略模式使得算法可獨立于使用它的客戶而變化。

2. 結構圖和代碼
Animation不同動畫的實現,主要是依靠Interpolator的不同實現而變。

定義接口Interpolator:

復制代碼 代碼如下:

package android.animation;

/**
 * A time interpolator defines the rate of change of an animation. This allows animations
 * to have non-linear motion, such as acceleration and deceleration.
 */
public interface Interpolator {

    /**
     * Maps a value representing the elapsed fraction of an animation to a value that represents
     * the interpolated fraction. This interpolated value is then multiplied by the change in
     * value of an animation to derive the animated value at the current elapsed animation time.
     *
     * @param input A value between 0 and 1.0 indicating our current point
     *        in the animation where 0 represents the start and 1.0 represents
     *        the end
     * @return The interpolation value. This value can be more than 1.0 for
     *         interpolators which overshoot their targets, or less than 0 for
     *         interpolators that undershoot their targets.
     */
    float getInterpolation(float input);

我們以AccelerateInterpolator為例,實現具體的策略,代碼如下:
復制代碼 代碼如下:

package android.view.animation;

import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;

/**
 * An interpolator where the rate of change starts out slowly and
 * and then accelerates.
 *
 */
public class AccelerateInterpolator implements Interpolator {
    private final float mFactor;
    private final double mDoubleFactor;

    public AccelerateInterpolator() {
        mFactor = 1.0f;
        mDoubleFactor = 2.0;
    }

    /**
     * Constructor
     *
     * @param factor Degree to which the animation should be eased. Seting
     *        factor to 1.0f produces a y=x^2 parabola. Increasing factor above
     *        1.0f  exaggerates the ease-in effect (i.e., it starts even
     *        slower and ends evens faster)
     */
    public AccelerateInterpolator(float factor) {
        mFactor = factor;
        mDoubleFactor = 2 * mFactor;
    }

    public AccelerateInterpolator(Context context, AttributeSet attrs) {
        TypedArray a =
            context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.AccelerateInterpolator);

        mFactor = a.getFloat(com.android.internal.R.styleable.AccelerateInterpolator_factor, 1.0f);
        mDoubleFactor = 2 * mFactor;

        a.recycle();
    }

    public float getInterpolation(float input) {
        if (mFactor == 1.0f) {
            return input * input;
        } else {
            return (float)Math.pow(input, mDoubleFactor);
        }
    }
}

其他的Interpolator實現在此不列舉了。
如何在Animation模塊實現不同的動畫呢?
在這里我想提一個應用很廣的概念:依賴注入。
在Animation模塊里實現不同的動畫,就是需要我們把各個Interpolator以父類或者接口的形式注入進去。
注入的方法一般是構造函數,set方法,注釋等等。
我們看看animation類是怎么做的:
復制代碼 代碼如下:

public abstract class Animation implements Cloneable {
    Interpolator mInterpolator;
    // 通過set方法注入  
    public void setInterpolator(Interpolator i) {
         mInterpolator = i;
     }

    public boolean getTransformation(long currentTime, Transformation outTransformation) {
        // ... ...
        // 具體調用
        final float interpolatedTime = mInterpolator.getInterpolation(normalizedTime);
        applyTransformation(interpolatedTime, outTransformation);
       // ... ...
    }

     // 缺省實現,是個小技巧,順便提下,這個不是重點
     protected void ensureInterpolator() {
         if (mInterpolator == null) {
             mInterpolator = new AccelerateDecelerateInterpolator();
         }
     }

}

  策略模式其實就是多態的一個淋漓精致的體現。

3. 效果
(1).行為型模式
(2).消除了一些if...else...的條件語句
(3).客戶可以對實現進行選擇,但是客戶必須要了解這個不同策略的實現(這句話好像是廢話,總而言之,客戶需要學習成本)
(4).代碼注釋中提到了缺省實現,可以讓客戶不了解策略,也能實現默認的策略
(5).注入的方式有多種:構造函數,set方法,注釋。配置解析等等

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线日韩日本国产亚洲| 亚洲欧美国产视频| 丝袜美腿精品国产二区| 国产成人欧美在线观看| 日韩在线视频中文字幕| 青青草国产精品一区二区| 最新的欧美黄色| 国产日韩在线视频| 精品一区二区三区四区| 国产精品一区二区久久国产| 俺去啦;欧美日韩| 日韩欧美一区二区三区久久| 国产一区二区三区高清在线观看| 久久精品中文字幕电影| 国产欧美日韩免费看aⅴ视频| 欧美一区二区三区精品电影| 欧美日韩在线视频一区二区| 国产在线拍揄自揄视频不卡99| 亚洲国产日韩欧美在线动漫| 国产精品国产三级国产aⅴ浪潮| 欧美综合国产精品久久丁香| 欧美伊久线香蕉线新在线| 91精品啪在线观看麻豆免费| 欧美激情视频在线免费观看 欧美视频免费一| 九九热99久久久国产盗摄| 久久久久久久久久久av| 欧美最猛性xxxxx(亚洲精品)| 欧美激情精品久久久久久大尺度| 久久成人18免费网站| 国产一区二区三区久久精品| 欧美性猛交99久久久久99按摩| www.欧美免费| 亚洲国产天堂久久综合网| 国产成人av网址| 国产丝袜高跟一区| 亚洲视频在线播放| 色综合老司机第九色激情| 欧美日韩国产精品一区二区不卡中文| 亚洲男人天堂网站| 2025国产精品视频| 亚洲二区在线播放视频| 91国内免费在线视频| 在线观看国产欧美| 91日本视频在线| 国内精品久久久久久久久| 久久成人综合视频| 亚洲午夜av久久乱码| 九九久久久久99精品| 性欧美xxxx| 中文字幕亚洲精品| 欧美性猛交xxxx久久久| 亚洲少妇中文在线| 中文字幕欧美日韩在线| 久久国内精品一国内精品| 91影视免费在线观看| 日本久久久久久| 欧美性猛交xxxx乱大交| 日韩精品视频免费专区在线播放| 日韩欧美亚洲综合| 日本久久久久久| 国产精品xxx视频| 亚洲视频精品在线| 久久精品这里热有精品| 亚洲电影免费观看高清完整版在线| 福利二区91精品bt7086| 亚洲欧美日韩一区二区三区在线| 欧美高清性猛交| 97在线观看视频国产| 日韩在线国产精品| 国产在线观看91精品一区| 国产成人一区二区| 日韩欧美亚洲成人| 清纯唯美日韩制服另类| 成人福利网站在线观看11| 国产精品久久久久久av| 亚洲欧美精品一区二区| 7777精品视频| 中文欧美日本在线资源| 欧美精品www在线观看| 久久久久久伊人| 欧亚精品在线观看| 久热在线中文字幕色999舞| 亚洲激情自拍图| 欧美精品性视频| 欧美日韩国产成人在线| 国外成人在线视频| 国产精品wwww| 精品久久久久久久久久| 欧美电影免费看| 日日噜噜噜夜夜爽亚洲精品| 中文字幕国产精品久久| 性欧美xxxx视频在线观看| 日韩精品视频免费在线观看| 久久久国产影院| 中文字幕欧美日韩在线| 大胆欧美人体视频| 亚洲精品国产精品国产自| 午夜精品国产精品大乳美女| 久久精品国产亚洲| 亚洲欧美日韩综合| 精品一区二区三区四区在线| 成人欧美一区二区三区在线| 精品福利在线观看| 色综合色综合久久综合频道88| 国产精品热视频| 国产欧美 在线欧美| 成人黄色网免费| 国产亚洲精品久久久久久牛牛| 96精品久久久久中文字幕| 亚洲 日韩 国产第一| 国产日韩视频在线观看| 欧美成人精品不卡视频在线观看| 欧美香蕉大胸在线视频观看| 欧美精品久久久久久久久久| 国产精品视频区1| 欧美激情国产精品| 伊人激情综合网| 亚洲精品日韩av| 亚洲欧美一区二区精品久久久| 成人黄色午夜影院| 51精品在线观看| 欧美丰满老妇厨房牲生活| 午夜精品久久久久久久白皮肤| 欧美一区二区三区免费观看| 亚洲一区二区三区sesese| 亚洲国产97在线精品一区| 91视频国产一区| 久久婷婷国产麻豆91天堂| 国产成人亚洲精品| 色综合老司机第九色激情| 国产精品福利无圣光在线一区| 日本亚洲精品在线观看| 亚洲www在线观看| 成人免费xxxxx在线观看| 91亚洲一区精品| 精品国产老师黑色丝袜高跟鞋| 欧美性受xxxx白人性爽| 激情成人中文字幕| 久久免费国产精品1| 日韩欧美在线视频日韩欧美在线视频| 欧美日韩国产一区二区三区| 91网站在线看| 国产一区视频在线播放| 亚洲国内精品视频| 亚州av一区二区| 国产成人精品一区| 成人av在线天堂| 视频在线观看99| 最近2019中文免费高清视频观看www99| 97香蕉久久夜色精品国产| 91色琪琪电影亚洲精品久久| 深夜成人在线观看| 日韩视频免费观看| 国产91露脸中文字幕在线| 91精品国产99久久久久久| 裸体女人亚洲精品一区| www.色综合| 国产欧美一区二区三区久久人妖| 中文字幕亚洲欧美日韩在线不卡| 欧美老女人在线视频| 国产精品成av人在线视午夜片| 色综合久久久久久中文网| 国产香蕉一区二区三区在线视频| 日本高清不卡的在线|