千家信息网

ThoughtWorks的结对编程指的是什么

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章将为大家详细讲解有关ThoughtWorks的结对编程指的是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。传言:在国内,ThoughtWo
千家信息网最后更新 2024年09月22日ThoughtWorks的结对编程指的是什么

这篇文章将为大家详细讲解有关ThoughtWorks的结对编程指的是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

传言:在国内,ThoughtWorks被称为"最难面试的IT公司"。貌似在国外也被评为全球最难面试的IT司。

面试一般都是纸上谈兵,尤其是设计模式这种需要"付诸实践"的面试题。面试前先给面试者布置"家庭作业",然后Thoughtworks会派工程师和面试者进行结对编程,让面试者通过测试驱动和代码重构表现他/她的编程规范、设计和重构的能力。这个时候可以很容易看到面试者对设计模式的掌握和运用情况。

设计模式,一般在面试的过程中都可以可无的提及到。但是这个就真的是看面试官的心情了。问简单了吧,单例模式,工厂模式,然后再深一点,单利模式是如何保证单例的实现的,感觉有点吹毛求疵的感觉。

回调函数和观察者模式的区别?

作为一个"资深程序员",看到这个题目你一定在飞速的思考着这个问题吧,这个题目其实不是在重点的考验你的设计模式的能力,而是考验一个程序员的及时反应能力。

观察者模式

网上很容易查到观察者模式的定义:

观察者模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。

Android中大量的使用了观察者模式。你可能已经用过ListView的adapter.notifyDataSetChanged来触发ListView的列表界面进行更新。notifyDataSetChanged的内部实现就是基于观察者模式。

跟进这段代码你会发现:BaseAdapter中的DataSetObserver(观察者)实现

Observer接口,DataSetObservable(被观察者)继承Observable类。

标准的观察者模式的写法应该照下面的UML图:

有几个概念(抽象主题(Subject)、具体主题(ConcreteSubject)、抽象观察者(Observer)和具体观察者(ConcreteObserver)),好在Java帮我实现了相关的代码,可以通过Observable类和Observer接口实现了观察者模式。Observer对象是观察者,Observable对象是被观察者。

还有EventBus, RxJava等常见的开源库也是居于观察者模式设计的,只是它们实现的方式各有不同。

回调函数

那回调函数和这又有什么关系呢?看看这段再熟悉不过的代码片段:

View的Listener监听会通过setOnClickListener给View传递一个Listener对象,当相关的事件发生时是触发onClick(回调onClick)。这其实也是一种观察者模式,OnClickListener是观察者,View是被观察者,当View收到Click事件是会通知观察者执行onClick()。

关于设计模式的反思

模式的外在形式其实是"套路",这些套路来源于现实中生产实践的总结,但要清楚认识到不是所有"套路"都会合适你的。

设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

设计模式的初衷是用经过检验的"套路"来提高代码的生产效率,人们也容易理解约定成俗的"套路"。从面向对象设计的角度来看,其实就是要做到高内聚低耦合。

所以,在考虑使用什么样的模式或模式组合时,我们不妨先冷静下来回忆一下面向对象设计的SOLID原则,我们要遵循一定的原则,而不是为了模式而模式。

面向对象设计的SOLID原则:

  • S 单一功能原则:对象应该仅具有一种单一功能。

  • O 开闭原则:软件体应该是对于扩展开放的,但是对于修改封闭的。

  • L 里氏替换原则:程序中的对象应该是可以在不改变程序正确性的前提下被它的子类所替换的。

  • I 接口隔离原则:多个特定客户端接口要好于一个宽泛用途的接口。

  • D 依赖反转原则:依赖于抽象而不是一个实例,依赖注入是该原则的一种实现方式。


所以综上所述:(答案不是标准,只是一种思路)

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。观察者模式完美的将观察者和被观察的对象分离开,一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。
回调函数其实也算是一种观察者模式的实现方式,回调函数实现的观察者和被观察者往往是一对一的依赖关系。
所以最明显的区别是观察者模式是一种设计思路,而回调函数式一种具体的实现方式;另一明显区别是一对多还是多对多的依赖关系方面。

Android较常用到的设计模式?
标准答案:
适配器模式:GridView、ListView的Adapter;
建造者模式:AlertDialog.Builder;
观察者模式:ListView的adapter.notifyDataSetChanged;
责任链模式:View的事件分发;

关于ThoughtWorks的结对编程指的是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

模式 观察 观察者 对象 设计 代码 原则 设计模式 函数 套路 接口 编程 方式 程序 主题 事件 标准 能力 明显 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 战地5服务器怎么进游戏 如何跳过密码进入数据库 数据库类型可分为3类 嵌入式软件开发设计工资 认知障碍的数据库介绍写什么内容 sdn控制器软件开发 软件开发是和程序员一样吗 数据库系统无法连接是什么原因 在联通做软件开发 工业网关和服务器通信 动态域名服务器 计算机网络安全及保护论文 南昌市专业的网络安全机构 保定科技学院有互联网专业吗 智慧教育软件开发商 山东 软件开发公司属于高新企业么 财务需要懂数据库吗 网络安全参与者的思想动态 南阳软件开发公司 网络安全问题处理机制 网络安全对于社会安全 贵州安卓软件开发商 山东中科软互联网科技有限公司 数据库管理系统缺点 测试软件开发工程师工资 网络安全工程师在国企好不好 宜兴工程软件开发平均价格 上海手机股票软件开发 服务器rss值是什么意思啊 网络安全保险的赔偿额度
0