Android 程式設計架構封裝-業務封裝
阿新 • • 發佈:2018-12-18
前言
作為一名優秀的程式設計師,相信大家都會遇到過產品設計中玩商城邏輯的設計,各種優惠活動相關的東西。那麼 業務需求是這樣的,
進貨量 優惠 活動各種玩法:
11月1日 -11月3日
- 買 1-5個,就10元一個。
- 買5個以上 ,10個以下,就優惠一點,8元一個。
- 買10個以上,就統一5元一個。
- 。。。。
11月4日 -11月9日
- 買 1-5個, 就9元一個。
- 買5個以上 ,10個以下,就優惠一點,7元一個。
- 買10個以上,就統一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 裡面。
那麼方法實現就變得清晰了。
小結:
這個是策略模式的應用。
這個就是 策略模式的應用,抽取封裝業務程式碼,就算產品隨便改優惠活動,也可以動態替換實現業務。
是不是很簡單的節奏。 可能會有覺得為什麼不用靜態方法抽取出來計算業務。可以是可以,看你喜歡羅。
認為小編寫的文章讓你學到東西的,多多支援。