1. 程式人生 > >Android 程式設計架構封裝-業務封裝

Android 程式設計架構封裝-業務封裝

前言

作為一名優秀的程式設計師,相信大家都會遇到過產品設計中玩商城邏輯的設計,各種優惠活動相關的東西。那麼 業務需求是這樣的,

進貨量 優惠 活動各種玩法:

     11月1日 -11月3日   

  1. 買 1-5個,就10元一個。 
  2. 買5個以上 ,10個以下,就優惠一點,8元一個。
  3. 買10個以上,就統一5元一個。
  4. 。。。。

    11月4日 -11月9日   

  1. 買 1-5個, 就9元一個。 
  2. 買5個以上 ,10個以下,就優惠一點,7元一個。
  3. 買10個以上,就統一4元一個。
  4. 、、。。。

 11月10日 以後   

1   3元一個。

。。。。

那麼問題就來了。

當這些業務全部弄在一個類中,一個activity 裡面,或者一個presenter 裡面的話,這個類就會變得臃腫,而且,作為程式猿點夠產品需求那邊修改的這麼快。每次到了下班時候,準備撤退,產品飛快地走過來,改需求,這種家常便飯也是常在的。

而且那種優惠活動,玩法幾乎每次都是思維很活躍的情況。一開始程式碼搞不好,日後加班有你受。維護起來更加無語。

那麼事情就來了,封裝一下吧。

針對這種型別的業務,抽象出一個介面,接口裡面有計算價格的方法。則不同的優惠活動直接以一種實現體的形式,將業務玩抽取一個方法出來統一管理。方便維護以及增加了可讀性的操作。而且更加直觀,業務擴充套件更為方便。

package com.twc.buygoods.goods;

public interface CalculatePrice {
    /**
     * 根據活動來計算價格。
     * @param goodsNum
     * @return
     */
    double calculatePrice(int goodsNum);
}

定義一個抽象介面。

package com.twc.buygoods.goods;

/**
 * 優惠活動1
 */
public class DiscountMethod implements CalculatePrice{

    /**
     * 買 1-5個,就10元一個。 
     * 買5個以上 ,10個以下,就優惠一點,8元一個。
     * 買10個以上,就統一5元一個。
     *
     * @param goodsNum
     * @return
     */
    @Override
    public double calculatePrice(int goodsNum) {
        if (goodsNum > 0 && goodsNum < 5) {
            return 10;
        } else if (goodsNum >= 5 && goodsNum < 10) {
            return 8;
        } else {
            return 5;
        }
    }
}

然後一個實現體封裝了計算方法。

package com.twc.buygoods;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.twc.buygoods.goods.CalculatePrice;
import com.twc.buygoods.goods.DiscountMethod;
import com.twc.buygoods.goods.OtherDiscountMethod;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.dele)
    Button dele;
    @BindView(R.id.add)
    Button add;
    @BindView(R.id.textView)
    TextView textView;
    @BindView(R.id.price)
    TextView price;
    @BindView(R.id.totalprice)
    TextView totalprice;
    private CalculatePrice calculatePrice;
    private OtherDiscountMethod calculatePrice2;
    private int goodsNum = 0;
    private View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.add:
                    goodsNum++;
                    textView.setText(goodsNum + "");
                    price.setText("本地計算單價:" + calculatePrice.calculatePrice(goodsNum));
                    totalprice.setText("合計:" + calculatePrice.calculatePrice(goodsNum) * goodsNum + "");
                    break;
                case R.id.dele:
                    if (goodsNum == 0) {
                        price.setText("本地計算單價:" + "0");
                        Toast("數量不能少於0");
                        return;
                    }
                    goodsNum--;
                    textView.setText(goodsNum + "");
                    price.setText("本地計算單價:" + calculatePrice.calculatePrice(goodsNum));
                    totalprice.setText("合計:" + calculatePrice.calculatePrice(goodsNum) * goodsNum + "");
                    break;
            }
        }
    };

    private void Toast(String msg) {
        Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        dele.setOnClickListener(listener);
        add.setOnClickListener(listener);
        calculatePrice = new DiscountMethod();
        calculatePrice2 = new OtherDiscountMethod();
    }
}

最後activity 裡面。

那麼方法實現就變得清晰了。

小結:

這個是策略模式的應用。

這個就是 策略模式的應用,抽取封裝業務程式碼,就算產品隨便改優惠活動,也可以動態替換實現業務。

是不是很簡單的節奏。 可能會有覺得為什麼不用靜態方法抽取出來計算業務。可以是可以,看你喜歡羅。

認為小編寫的文章讓你學到東西的,多多支援。