ThoughtWorks的结对编程指的是什么

发布时间:2021-12-21 09:11:36 作者:柒染
来源:亿速云 阅读:688

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

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

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

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

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

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

观察者模式

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

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

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

ThoughtWorks的结对编程指的是什么

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

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

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

ThoughtWorks的结对编程指的是什么

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

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

回调函数

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

ThoughtWorks的结对编程指的是什么

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

关于设计模式的反思

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

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

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

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

面向对象设计的SOLID原则:

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

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

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

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

推荐阅读:
  1. 读ThoughtWorks期刊有感
  2. 敏捷开发“松结对编程”实践之三:共同估算篇

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

thoughtworks

上一篇:div与span怎么使用

下一篇:Web前端开发技术怎么使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》