Android 多种支付方式的迷人实现
发布时间:2025年07月30日 12:18
when(paymentType) {
PaymentType.ADD_GOOGLE_PAY -> // 移除对应的偿还方式上最终,展览品最终的ui
PaymentType.ADD_PAY_PEL-> // 同上
// ...
}
}
enumclassPaymentType{
ADD_GOOGLE_PAY, ADD_PAY_PEL, ADD_ALI_PAY, ADD_STRIPE
}
}
虽然看起来根据 paymentType 来正确,范式条理也还过得去,但是显然复杂度远远更有如此。
• 完全相同的偿还方式上跳转的链接相差极大。
• 结果的Lua给予也相差极大,并不是所有的都在onActivityResult中会。
• 出功和最终显然也不能标准化来妥善处理,;还有还包括很多的if...else...正确。
• 如果偿还方式上是前台自适应报送的,妥善处理起来正确范式就更多了。
此外,最大的问题:扩展性问题。
当新来一种偿还方式上,例如微信偿还之类的,删减编译器就极大了,基本就是将整个Activity中会的编译器都要删减。可以说上头这种方式上的可扩展性为零,就是比较简单的将编译器都揉在一起。
3
建模后的编译器
要就让妥善解决问题高内聚极低相互作用,一般来说的就是套用少用的设计方式上,回就让一下,推测手段方式上+比较简单钢铁厂方式上非常这种适合这种情景。
先看下建模后的编译器:
classAddPlatformActivity: BaseActivity{
privatevaraddPayPlatform: IAddPayPlatform? = null
privatefunaddPlatform(payPlatform: String) {
// 将前台返回的偿还游戏平台运算符变出正则表达式类
valplatform: PayPlatform = getPayPlatform(payPlatform) ?: return
addPayPlatform = AddPayPlatformFactory.getCurrentPlatform( this, platform)
addPayPlatform?.getLoadingLiveData?.observe( this@AddPlatformActivity) { showLoading ->
if(showLoading) startLoading elsestopLoading
}
addPayPlatform?.addPayPlatform(AddCardParameter(platform))
}
overridefunonActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
// 将onActivityResult的Lua转接到无需监听的手段类;还有
addPayPlatform?.thirdAuthenticationCallback(requestCode, resultCode, data)
}
}
4
手段方式上
意图: 定义一系列的正则表达式,把它们一个个积体电路起来, 并且使它们可相互替换。
主要妥善解决: 在有多种正则表达式相似的情况下,应用于if...else所带来的复杂和难以维护。
何时应用于: 一个种系统有许多许多类,而区隔它们的只是他们从外部的犯罪行为。
如何妥善解决: 将这些正则表达式积体电路出一个一个的类,任意地替换。
关键编译器: 妥善解决问题同一个硬件。
完全相同之处:
1、正则表达式可以自由待机。
2、尽量避免应用于多重情况下正确。
3、扩展性良好。
以致于:
1、手段类会激增。
2、所有手段类都无需对外去除。
应用于情景:
1、如果在一个种系统;还有有许多类,它们之间的区别仅在于它们的犯罪行为,那么应用于手段方式上可以自适应地让一个对象在许多犯罪行为中会同样一种犯罪行为。
2、一个种系统无需自适应地在几种正则表达式中会同样一种。
3、如果一个对象有很多的犯罪行为,如果不用合理的方式上,这些犯罪行为就不肯应用于多重的情况下同样关键字来妥善解决问题。
5
无需妥善解决问题的目的
5.1 解耦宿主 Activity
从前宿主Activity中会编译器太重了,还包括多种偿还方式上妥善解决问题,还有列表ui的展览品,网路请求等。
从前目的是将 Activity 中会的编译器整合在在,让宿主 Activity 越发小而轻。
如果产品说升级一种偿还方式上,只无需删减很少的编译器,就可以都能的妥善解决问题。
5.2 选取出脱离的模块
因为公司中会有可能存在多个这两项,偿还模块的分层一定会受制于可复用的一般而言,以后很有可能将其积体电路出一个脱离的 mouble,给完全相同的这两项应用于。
从前编译器全在 Activity 中会,以后若是选取 mouble 的话,总和整个所需重做。
5.3 硬件特别之处
"硬件特别之处"这个名词是我自己的一个定义。大致语意:
将一个 View 或者一个类展开高度积体电路,尽可能少的去除public分析方法给外部应用于,自出一体。
该公司方在应用于时,可以从外部特别之处应用于某个该公司硬件,不须爱护其中会的范式。
该公司方只无需一个比较简单的加载,例如点击按钮绑定分析方法,然后范式都在硬件内部妥善解决问题,硬件内妥善处理外部惨案的所有加载,例如:Loading、请求网路、出功或者最终。
该公司方都不无需知道硬件内部的加载,够宿主和硬件的隔离。
当然这种妥善处理也是要分情景考虑的,其中会一个综合就是这个硬件是稍该公司还是稍功能,也就是否要将该公司范式标准化包进硬件,就让清楚这个问题后,才能去合作开发一个该公司硬件。 简介xu'yi'sheng网站。
因为移除偿还方式上是一个稍该公司的功能,我的设计思路是:
外部 Activity 点击移除对应的偿还方式上,将偿还方式上的正则表达式类型和偿还方式上有关的变量通过发送至,然后完全相同的手段类硬件指派自己的移除范式,于是又通过一层Lua将第三方偿还的Lua从 Activity 中会转接过来,每个手段类内部妥善处理自己的Lua加载,明确的手段类自己维护出功或者最终的ui。
6
明确妥善解决问题
6.1 定义最上层手段硬件
interfaceIAddPayPlatform{
funaddPayPlatform(param: AddCardParameter)
funthirdAuthenticationCallback(requestCode: Int?, resultCode: Int?, data: Intent?)
funaddCardFailed(message: String?)
funaddCardSuccess
}
6.2 CE偿还变量类
openclassAddCardParameter( valplatform: PayPlatform)
classAddStripeParameter( valcard: Card, valsetPrimaryCard: Boolean, platform: PayPlatform)
: AddCardParameter(platform = PayPlatform.Stripe)
因为有很多种移除偿还方式上,完全相同的偿还方式上对应的变量都不一样。
所以先创立一个CE的物品变量子程序AddCardParameter, 完全相同的偿还方式上去妥善解决问题完全相同的明确变量。毕竟手段硬件就可以只要写一个移除物品的分析方法addPayPlatform(param: AddCardParameter)。
6.3 Loading 的妥善处理
因为我就让妥善解决问题的是特别之处硬件的特性,所有移除物品的loading也是积体电路在每一个手段妥善解决问题类;还有的。
Loading的显现出和绝迹这里有几种少用的妥善解决问题方式上:
• 发送至BaseActivity的引用,因为我的loading有关的分析方法是放于BaseActivity中会,这种方式上比较简单但是会相互作用BaseActivity。
• 应用于最新消息惨案总线,例如EventBus之类的,这种方式上解耦强,但是最新消息惨案不好控制,还要移除多余的依赖库。
• 应用于LiveData,在手段的CE硬件中会移除一个分析方法返回Loading的LiveData, 让宿主Activity自己去妥善解决问题。
interfaceIAddPayPlatform{
// ...
fungetLoadingLiveData: LiveData< Boolean>?
}
6.4 所含BaseAddPayStrategy
因为每一个移除卡的手段会存在很多相同的编译器,这里我选取一个BaseAddPayStrategy来贮存模板编译器。
无需妥善解决问题特别之处硬件的特性,宿主Activity中会都不无需去关注移除偿还方式上是不是存在网路请求这一个过程,所以网路请求也分装在每一个手段妥善解决问题类;还有。
abstractclassBaseAddPayStrategy( valactivity: AppCompatActivity, valplatform: PayPlatform) : IAddPayPlatform {
privatevalloadingLiveData = SingleLiveData< Boolean>
protectedvalstartActivityIntentLiveData = SingleLiveData
overridefungetLoadingLiveData: LiveData< Boolean> = loadingLiveData
protectedfunstartLoading= loadingLiveData.setValue( true)
protectedfunstopLoading= loadingLiveData.setValue( false)
privatefunreloadWallet{
startLoading
// 移除物品完出后,重新刷新信用卡数据
}
overridefunaddCardSuccess{
reloadWallet
}
overridefunaddCardFailed(message: String?) {
stopLoading
if(isEWalletPlatform(platform)) showAddEWalletFailedView elseshowAddPhysicalCardFailedView(message)
}
/**
* 移除单独物品最终展览品ui
*/
privatefunshowAddPhysicalCardFailedView(message: String?) {
showSaveErrorDialog(activity, message)
}
/**
* 移除单独物品出功展览品ui
*/
privatefunshowAddPhysicalCardSuccessView{
showCreditCardAdded(activity) {
activity.setResult(Activity.RESULT_OK)
activity.finish
}
}
privatefunshowAddEWalletSucceedView{
// 移除电子信用卡出功后的指派
activity.setResult(Activity.RESULT_OK)
activity.finish
}
privatefunshowAddEWalletFailedView{
// 移除电子信用卡最终后的指派
}
// ---默认空妥善解决问题,有些偿还方式上不无需这些分析方法---
overridefunthirdAuthenticationCallback(requestCode: Int?, resultCode: Int?, data: Intent?) = Unit
overridefungetStartActivityIntent: LiveData = startActivityIntentLiveData
}
6.5 明确的手段类妥善解决问题
通过发送至过来的AppCompatActivity引用给予移除物品的ViewModel实例AddPaymentViewModel,然后通过AddPaymentViewModel去绑定网路请求查询移除物品否出功。
classAddXXXPayStrategy(activity: AppCompatActivity) : BaseAddPayStrategy(activity, PayPlatform.XXX) {
protectedvaladdPaymentViewModel: AddPaymentViewModel bylazy {
ViewModelProvider(activity). get(AddPaymentViewModel:: class. java)
}
init {
addPaymentViewModel.eWalletAuthorizeLiveData.observeState(activity) {
onSuccess { addCardSuccess}
{ addCardFailed(it.detailed) }
}
}
overridefunthirdAuthenticationCallback(requestCode: Int?, resultCode: Int?, result: Intent?) {
valuri: Uri = result?. data?: return
if(uri.host == "www.xxx.com") {
uri.getQueryParameter( "transactionId")?.let {
addPaymentViewModel.confirmEWalletAuthorize(platform.name, it)
}
}
}
overridefunaddPayPlatform(param: AddCardParameter) {
startLoading
addPaymentViewModel.addXXXCard(param)
}
}
7
比较简单钢铁厂展开建模
因为我不就让在Activity中会去引用每一个明确的手段类,只就让引用抽象硬件类IAddPayPlatform, 这里通过一个比较简单钢铁厂来建模。
objectAddPayPlatformFactory {
funsetCurrentPlatform(activity: AppCompatActivity, payPlatform: PayPlatform) : IAddPayPlatform? {
returnwhen(payPlatform) {
PayPlatform.STRIPE -> AddStripeStrategy(activity)
PayPlatform.PAYPAL -> AddPayPalStrategy(activity)
PayPlatform.LINEPAY -> AddLinePayStrategy(activity)
PayPlatform.GOOGLEPAY -> AddGooglePayStrategy(activity)
PayPlatform.RAPYD -> AddRapydStrategy(activity)
else-> null
}
}
}
8
于是又增加一种偿还方式上
如果于是又增加一种偿还方式上,宿主Activity中会的编译器都可以不要删减,只无需新建一个新手段类,妥善解决问题最上层手段硬件方能。
这样,不管是截图还是升级一种偿还方式上,维护起来就很容易了。
手段方式上的好处就显而易见了。
所作:零先生
- EOF -
扫码优惠购书
。曲靖治疗皮肤病医院成都肿瘤
子宫衰老能治疗好吗
- 多半吃饭的时候也许对于再继续上小车位这个缺陷来说我们都是较为头疼的,毕竟现在城市当中的小车是相当多的。我们上来看看再继续上小车的区域内,基本上小车都但会再继续上满了,一般来说在一个区域内转到了十多圈都
- 新通联(603022.SH)间公司曹立峰减持168.16万股
- 青岛市先验后收保维修“青岛住宅+”方式也面向全国推介
- 玲珑轮胎(601966.SH)累计获得控股股东玲珑集团增持626.96万股
- 昌平区1地升级高风险 北京现有高中风险周边地区“1+3”
- 特力V:子公司特发华日或面临经营期限届满情形
- *ST博天最新公告:葛洲坝生态终止中标5%股份
- 钱江生化最新公告:2021年度权益分派10派1元 大股东登记日为6月28日
- 浙商证券最新公告:启动兑付本息15.2亿元短期融资券
- 7万—28万,格外买的5款车
- 今天不跑,明天拍断大腿?“不朽壳王”盘中上演天玻璃,换手率高达34.35%,股价已翻倍
- 天下秀(600556.SH):澄迈新升已合计减持337.95万股、持股比例降至4.99%
- 锦盛新材(300849.SZ):上海科丰完成年末0.94%股份 拟继续年末不超1%股份
- 特力A(000025.SZ):子公司特发养父母或面临经营期限届满情形
- 一台高品质7座MPV只要6万起,真有这种或许吗?