关于“策略模式”与“MVP风格”的联系理解心得

工程师绩效评估:如何量化与提升“坚守坚实原则”的工程素养 在软件工程领域,设计原则与代码规范是构建可维护、可扩展系统的基石。从基础的编码规范到经典的SOLID、DRY、KISS等设计原则,其核心原理在于通过一系列最佳实践指导开发决策,降低系统复杂度与维护成本。这些原则的技术价值体现在提升代码质量、增强团队协作效率以及保障软件的长期演进能力,广泛应用于从初创公司MVP到金融核心系统的各类场景。本文聚焦于工程师绩效评估中的“坚守坚实原则”标准,深入拆解其从具体规则到工程哲学的多层次内涵,并探讨如何在代码审查、技术设计及团队文化中有效考察与践行这一关键素养,帮助工程师在 阅读详情

近日,重新接触到“MVP”这个词,然后百度搜索了一遍,重新找到鸿洋大神的关于MVP的帖子:浅谈 MVP in Android,看了并对照着敲了一下,有一点自己的心得,后来晚上翻看了一下《大话设计模式》这本书,重新看一下,突然发现““策略模式”与“MVP风格”竟然有一些相同的地方,通过“MVP风格”来理解一直看不是很明白的“策略模式”,居然很好明白了,于是现在写下来,就当自己的笔记了。


首先简单介绍一下MVP风格。

MVP风格:

Model         : 模型+业务逻辑,包括接口+具体实现;用接口是为了其继承性,而具体实现则是实现接口,并实现具体方法。需要实现哪些方法,根据具体的业务实现。

View            : 视图,只有接口;首先根据视图拥有哪些组件,直接从组件可以获得什么信息,并根据此写方法。

Presenter  : 主持人(直接翻译的,实在找不到合适的解释,英语渣,╮(╯_╰)╭),只有具体实现。参照Model和View来具体实现。


分类大概是这么个样子:



MVP风格,其实就是把“V视图”和“M业务逻辑”更好地分离开来,然后通过“P”作为中间人对V和M进行联系,而V和M不直接进行联系。

举个例子:(额。。。不举例子了,具体例子,还是看鸿洋大神的吧:再次传送门)

然后策略模式大概也是这样的思想:

例如:实现一个计算器。

1、首先抽象出一个Operate类,拥有其抽象方法getCalResult(int on1, int on2),传入参数是参与计算的操作数1和操作数2。

Operate.class

public abstract class Operate {
	
	public abstract int getResult(int num1, int num2);
	
}

2、实现具体操作类OperateAdd和OperateMin,并继承Operate类,实现各自的getCalResult(int on1, on2)的具体方法。

OperateAdd.class

public class OperateAdd extends Operate {
	
	@Override
	public int getResult(int num1, int num2) {
	<span style="white-space:pre">	</span>return num1+num2;
	}

}

OperateMin.class

public class OperateMinus extends Operate {
	
<span style="white-space:pre">	</span>@Override
<span style="white-space:pre">	</span>public int getResult(int num1, int num2) {
		return num1-num2;
	}

}


PS : 其实,Operate就相当于是接口,而OperateAdd和OperateMinus就相当于是具体实现,而两者一起,就相当于是Model。


3、实现M和V的连接枢纽Presenter---OperatePresenter。

OperatePresenter.class

public class OperatePresenter {
	
	private Operate mOperate = null;
	
	public OperatePresenter(String strOper) {  /* 根据操作符,自动选择计算方法 */
		switch(strOper){
		case "+":
			mOperate = new OperateAdd();
			break;
		case "-":
			mOperate = new OperateMinus();
			break;
		}
	}
	
	public int getCalResult(int num1, int num2){
		return mOperate.getResult(num1, num2);
	}
	
}

4、最后,在View中生成Presenter对象,并在对应位置调用getCalResult方法,并传入通过View获取到的操作数1和操作数2即可获得结果。

public class Test {
	public static void main(String[] args) {

		OperatePresenter mOPAdd = new OperatePresenter("+");
		System.out.println("0 + 5 = "+mOPAdd.getCalResult(0, 5));
		
		OperatePresenter mOPMin = new OperatePresenter("-");
		System.out.println("10 - 3 = "+mOPMin.getCalResult(10, 3));
	}
}


最后,得出的结果就是:



全文总结:MVP风格 和 策略模式 在代码风格上,都是差不多的:Model(接口/抽象:Operate,具体实现:OperateAdd,OperateMinus),View(抽象:上例没有用到),Presenter(具体实现:OperatePresenter),同样是做到了业务逻辑与界面的分离(因为在View中,只有Presenter参与到里面,而业务逻辑OperateAdd和OperateMinus,以及其父类Model都与View无关)。当然也有些许的差别,但是总的来说还是差不多的。当我看完鸿洋大神的浅谈MVP,再看策略模式的时候,通过MVP来理解策略模式,居然看懂了(之前一头雾水),因此写下这篇博客,就当做是用来记录一下,也方便自己以后看吧。偷懒了,写得不好,请见谅。

技术思维解构电影创作:从《鸟牙》预告片看跨界创新方法论 系统架构设计是软件工程中的核心概念,它通过分层解耦和模块化思维来构建可维护、可扩展的技术解决方案。其原理在于将复杂系统分解为相互协作的组件,每个组件专注于特定功能,通过标准化接口实现高效交互。这种结构化思维的技术价值在于提升开发效率、降低维护成本,并支持系统的持续演进。在应用场景上,系统架构思维不仅适用于软件开发,还能跨界应用于创意内容生产,如电影预告片的制作过程就体现了类似的设计逻辑。以《鸟牙》预告片为例,其影像叙事中的版本控制和用户体验优化等热词概念,展现了技术思维如何帮助创作者实现精密的情绪控制和信息 阅读详情

相关推荐

华为数通---配置风暴控制案例

风暴控制可以通过阻塞报文或关闭端口来阻断广播、未知组播和未知单播报文的流量。

2301_77081516的博客 1624

MVP 模式简单易懂的介绍方式

MVP 模式是 MVC 模式在 Android 上的一种变体,要介绍 MVP 就得先介绍 MVC。在 MVC 模式中,Activity 应该是属于 View 这一层。而实质上,它既承担了 View,同时也包含一些 Controller 的东西在里面。这对于开发与维护来说不太友好,耦合度大高了。把 Activity 的 View 和 Controller 抽离出来就变成了 View 和 Pres

道的博客 495

手把手教你搭建日本亚马逊CVV钓鱼系统(含自动验证功能)

本文详细介绍了电商平台安全防护的关键实践,重点讲解了如何构建自动化风控系统。内容包括基础架构设计、用户行为分析、交易风险评估模型构建、验证机制实现以及系统部署优化,帮助电商平台有效识别和防范安全威胁,同时提升用户体验。

weixin_30952535的博客 814

浅析设计模式:策略模式(Strategy)

策略模式(Strategy)

SomeoneMH的博客 1568

Innovus快捷键大全:从入门到精通的效率提升指南

本文是Innovus快捷键从入门到精通的效率提升指南,旨在帮助芯片后端设计工程师通过掌握核心快捷键,将重复性鼠标操作转化为高效的肌肉记忆,从而显著提升版图设计、编辑和分析的工作流速度。文章系统讲解了视图导航、对象选择编辑、流程管理等关键快捷键组合,并提供了个性化配置与实战策略,助力工程师突破效率瓶颈,实现人机合一的流畅设计体验。

silver的专栏 796

NVIDIA DRIVE SDK学习(二)——NvMedia

可以通过使用NvSciBuf API通过NvMedia Tensor属性分配NvSciBuf来创建NvMedia张量。由于NvSciBuf API有助于NvMedia和NVIDIA®CUDA®之间的数据共享,这使得分配的张量可以在NvSciBuf API允许的情况下重复使用。它支持图像聚合操作。NvSciSync组件使得NvMedia组件可以与其他组件保持同步,比如CUDA组件、基于NvSciSync的组件等。立体视差模式:在这种模式下,该模块通过左图像和右图像来产生立体视差,从而进行物体深度测量。

weixin_39592381的博客 3044

MVP(理论加代码格式)

一、MVP概念 M : Model(数据层.负责与网络层和数据库层的逻辑交互) (数据库/网络请求) V : View(视图层/UI层:负责绘制UI元素/显示数据,与用户进行交互,并向Presenter报告用户行为) (activity) P : Presenter (是连接Model 和 View 的桥梁,从Model拿数据, 应用到UI层, 管理UI的状态, 决定要显示什么, 响应用户的行为...

每一次 我都会变的更强 888

三菱FX5U系列PLC与汇川IT6000系列触摸屏进行MODBUS TCP通信的具体方法

三菱FX5U系列PLC与汇川IT6000系列触摸屏进行MODBUS TCP通信的具体方法

Robot_PLC_HMI_Automation 6513

一图看懂架构风格,架构模式,设计模式

它描述了在特定上下文中,如何组织和设计软件系统的结构和组件之间的关系。架构模式提供了一套可重用的设计原则和指导,用于解决常见的架构问题。常见的软件架构模式有MVC模式、MVP模式、MVVM模式、黑板模式等。软件架构模式关注的是系统的结构和组件之间的关系,以及如何解决特定的设计问题。常见的设计模式包括单例模式、工厂模式、观察者模式、策略模式等。设计模式关注的是类和对象之间的关系和交互方式,以及如何实现灵活、可维护和可扩展的代码。软件架构风格,软件架构模式,23种设计模式,他们之间的不同的含义。

生活需要深度 2455

基于STM32的智能浇花系统毕业设计(全部资料)

摘要:本文设计了一种基于STM32单片机的智能浇花系统,集成了环境温湿度检测、土壤温湿度监测、LCD显示、Wi-Fi联网及手机APP远程控制等功能。系统通过传感器实时采集环境参数,自动控制水泵工作实现智能灌溉,同时支持用户通过手机APP远程监控和调节。论文详细阐述了硬件选型、软件设计及系统测试过程,验证了系统的稳定性和实用性。该设计为家庭园艺提供了智能化解决方案,具有节水高效、操作便捷等特点。关键词:STM32;智能灌溉;远程控制;环境监测;Wi-Fi通信。

3254968421的博客 1194

华为OD技术面真题 - Python开发 - 1

汇总华为OD技术面八股Python八股,高频技术真题并提供详细解答。

qq_45776114的博客 1716

Android面试整理(7)-架构设计和设计模式

架构设计和设计模式1.谈谈你对 Android 设计模式的理解2.MVC MVP MVVM 原理和区别3.你所知道的设计模式有哪些?4.项目中常用的设计模式5.手写生产者/消费者模式6.写出观察者模式的代码7.适配器模式,装饰者模式,外观模式的异同?8.用到的一些开源框架,介绍一个看过源码的,内部实现过程。9.谈谈对 RxJava 的理解 1.谈谈你对 Android 设计模式的理解 从Android代码中来记忆23种设计模式 https://www.jianshu.com/p/1a9f571ad7c0 2

wjh8914320的博客 892

MATLAB基础应用精讲-【图像处理】GNN图神经网络(附python代码实现)

图神经网络由于其在处理非欧空间数据和复杂特征方面的优势,受到广泛关注并应用于推荐系统、知识图谱、交通道路分析等场景。图结构可描述复杂关系,如基因结构、通信网络、交通路线、社交网络等。图计算挖掘结构信息,但无法学习节点特征。神经网络在欧氏空间数据上表现优越,但无法直接应用于非欧氏空间的图数据。图神经网络结合图计算和神经网络优势,处理非欧氏空间数据及其复杂特征,应用于网络链接预测、推荐系统和交通道路分析等场景。实际应用中,图数据规模庞大,如百亿级节点、千亿级边,存储开销超过10TB。

qq_36130719的博客 1138

学会工程取舍:软件开发中“不再强求”的智慧与实践

工程取舍是每个开发者从初级走向成熟必须掌握的核心能力。在资源有限、需求多变的现实项目中,学会识别投入产出比,敢于放弃部分非核心追求,往往比盲目追求“完美代码”更能创造价值。从代码重构、性能优化到事务一致性,技术的价值不在于堆砌最新框架,而在于解决实际业务问题。通过YAGNI原则、最终一致性、技术选型评估等手段,开发者可以在保证核心链路稳定的同时,合理控制技术债和系统复杂度。本文结合用户反馈系统实战案例,展示如何将“不强求”转化为一套可落地的工程判断力,帮助团队提升交付效率,也帮助个人找到更从容的成长节奏。

weixin_34205826的博客 379

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

从0到1开发虎扑体育应用:TLint项目目录结构与代码组织最佳实践 [特殊字符]

想要快速掌握Android开发中MVP架构的最佳实践吗?TLint项目为你提供了一个完整的虎扑体育应用开发示例,基于Dagger2+RxJava+Retrofit技术栈,采用清晰的MVP模式。本文将深入解析这个开源项目的目录结构和代码组织方式,帮助你从零开始构建高质量的Android应用。 ## 为什么选择TLint作为学习模板? 🤔 TLint项目是一个完整的虎扑体育客户端实现,它不仅功能

gitblog_00305的博客 406

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

碎碎记:六小时的《架构漫谈》公司内部分享学习会

记录在分享会中的一些收获。当然,学习会中讲解的远远不止这些。在会中,我只记录了一些关键字,因此,以下的记录大多凭记忆和自己的认知二次阐述。

wzj_what_why_how的博客 360

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

工程师绩效评估:如何量化“坚守原则”这一关键软技能

在软件工程领域,代码质量和系统可维护性是衡量项目长期健康度的核心指标。其背后遵循的是一系列经过验证的工程原则,如SOLID、DRY、KISS等设计原则,它们构成了构建健壮、可扩展软件系统的理论基础。这些原则的价值在于,它们通过规范代码结构、设计决策和团队协作模式,从根本上降低系统的复杂性和技术债务,从而提升工程的长期效能。在实际应用场景中,这些原则具体体现在**代码评审**、**持续集成**流程、架构决策记录以及自动化脚本的编写等日常实践中。例如,在**代码评审**中坚持命名规范和单一职责,或在**持续集成

weixin_30924239的博客 441

你竟然写出这样的代码

上周开会时,跟同事在讨论,什么是好的代码。什么是好的代码,怎么定义好的代码。往简单了说,自己刚写的代码都是好的代码,别人写的都是垃圾。往复杂了说,高内聚,低耦合,OCP、SRP、ISP,...

eclipse_xu 1610

Code Review 修罗场:Vibe Coding 写出的“完美代码”,为何让我脊背发凉?

Vibe Coding(氛围编程)正在重塑软件开发:只要描述想法,AI 就能生成代码。这种“言出法随”的快感让无数开发者沉迷。但作为架构师,我在 Code Review 中看到了危机:缺乏上下文的逻辑断层、被忽略的边界条件、以及难以维护的“面条代码”。本文将带你走进一场真实的 CR 现场,深度剖析 Vibe Coding 的双刃剑效应,并教你如何用严谨的工程思维驾驭 AI,别让你的项目变成一座金玉其外、败絮其中的危楼。

一个还没被代码“优化”掉太多头发的程序员。在这里分享技术干货、踩坑实录和“防秃”心得。 代码搬运工,BUG 制造商,偶尔也产出一些有用的文字。 白天与需求搏斗,晚上与BUG和解。这是我的“数字战壕”日记。 1272

B站Java日常实习面经深度复盘:项目拷打 + 八股文 + 设计模式实战,面试官连环追问全解析!

我的第一个项目是一个智能标签推荐系统,主要用于给用户动态打标签(比如“二次元爱好者”、“深夜活跃用户”等)。核心特点是算法可插拔—— 不同的标签生成策略(如规则引擎、机器学习模型、图算法)可以灵活替换,而无需改动主流程代码。系统通过 Spring 的和策略模式实现运行时动态加载不同算法实现。第二个项目是基于 LLM 的代码 Review 辅助工具。

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 1138

技术人的“玩乐主义”:从盲盒到开发流程的游戏化设计

在软件工程领域,持续集成与敏捷开发等实践旨在通过快速反馈循环提升开发效率与团队协作。其核心原理在于将复杂任务拆解为可验证的微步骤,并为每个步骤设计即时、正向的反馈机制,从而有效对抗长期面对抽象代码与不确定需求所带来的心理负荷,维持开发者的内在动机与创造力。这种对确定性反馈和有限惊喜的追求,与当下技术圈流行的潮玩盲盒现象背后的心理机制高度同构。本文以“初音未来盲盒”为引,探讨如何将这种“玩乐主义”的精髓——如有约束的随机性和实体化成就反馈——系统性地融入开发环境、CI/CD流水线乃至任务管理流程中,通过一个完

weixin_34009794的博客 466

框架 和设计模式 架构的区别

框架和设计模式的区别         有很多程序员往往把框架模式和设计模式混淆,认为MVC是一种设计模式。实际上它们完全是不同的概念。[7]          框架、设计模式这两个概念总容易被混淆,其实它们之间还是有区别的。框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。在软件生产中有三种级别的重用:内部重用,即在同一应用中能公共使用的抽...

weixin_33973600的博客 195

技术人如何避免盲目模仿陷阱:从表象到内核的理性成长

在软件工程实践中,技术选型与架构设计是开发者面临的核心挑战。理解技术背后的第一性原理和权衡取舍,是做出理性决策的基础。微服务、DDD等架构模式的价值在于其解决特定复杂度问题的能力,而非形式上的先进性。技术选型需结合团队上下文与业务场景,避免因追逐热门框架而引入不必要的复杂度。本文以技术领域的“模仿陷阱”为切入点,探讨如何识别技术选型、架构设计、开发实践中的常见误区,强调通过上下文感知、增量演进的思维,建立可持续的技术成长路径,帮助开发者在微服务架构、技术选型等关键决策中避开陷阱,实现从形式模仿到本质理解的跨

weixin_30383279的博客 961

客户端设计(中):OOP、SOLID 与设计模式

oop、solid、设计模式。单例模式、构造模式、原型模式、责任链模式、解释器模式、观察者模式、备忘录模式、模板方法、代理模式、适配器模式、外观模式

mix39的博客 459

《Effective Java》学习笔记5 Prefer dependency injection to hardwiring resources

本栏是博主根据如题教材进行Java进阶时所记的笔记,包括对原著的概括、理解,教材代码的报错和运行情况。十分建议看过原著遇到费解地方再来参考或与博主讨论。致敬作者Joshua Bloch跟以杨春花为首的译者团队,以及为我提供可参考博文的博主们。另外,本条目是《Effective Java 3rd Edition》中的新条目,此后笔记多基于新一些的第三版。 用依赖注入代替硬编码 硬编码 首先说明...

欢迎访问 花落的速度 的博客 634

让ai当你的p10导师:用快马智能生成并优化客服机器人代码

提到"需要持久化数据",就自动配置了JPA和H2数据库。现在每次启动新项目,我都会先在快马上让AI生成初始版本,再基于业务需求进行深度定制,这应该就是未来人机协作的常态了。对于需要快速验证产品的团队,这种"描述需求-生成骨架-迭代优化"的流程,比从零开始写代码至少节省50%时间。特别是平台内置的多种AI模型,在调试阶段能给出不同风格的优化建议,就像有个随时待命的技术顾问。遇到的主要挑战是上下文连贯性处理,后来通过给每个对话线程分配UUID,并在Redis缓存对话快照的方案解决。

AgatePanther34的博客 21
下一篇: 报找不到so文件时有可能的一种情况
pgm_monkey
博客等级 码龄11年 3粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值