Android 编程架构封装-业务封装

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DTJ_74/article/details/83471953

前言

大家都是优秀的程序员,相信大家都会遇到过产品设计中玩商城逻辑的设计,各种优惠活动相关的东西。那么 业务需求是这样的,

进货量 优惠 活动各种玩法:

     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 里面。

那么方法实现就变得清晰了。

小结:

这个是策略模式的应用。

这个就是 策略模式的应用,抽取封装业务代码,就算产品随便改优惠活动,也可以动态替换实现业务。

是不是很简单的节奏。 可能会有觉得为什么不用静态方法抽取出来计算业务。可以是可以,看你喜欢罗。

认为小编写的文章让你学到东西的,多多支持。

https://github.com/weicheng-74/BuyGoods Demo 

猜你喜欢

转载自blog.csdn.net/DTJ_74/article/details/83471953
今日推荐