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

xiaoxiao2023-03-22  45

前言

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

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

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

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

 

小结:

这个是策略模式的应用。

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

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

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

 

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

 

 

转载请注明原文地址: https://www.6miu.com/read-4987457.html
最新回复(0)