按照学习计划,最近要开始研究设计模式和JAVA中好的编程习惯(effective java)。 但是我却无意中在研究Mockito的时候发现一种被称为反面模式的东西。非常有趣。 从维基百科上搬过来放着。毕竟不是人人都能看到墙外的花花世界的,:)

一、简介

在软件工程中,一个反面模式(anti-pattern或antipattern)指的是在实践中明显出现但又低效或是有待优化的设计模式,是用来解决问题的带有共同性的不良方法。它们已经经过研究并分类,以防止日后重蹈覆辙,并能在研发尚未投产的系统时辨认出来。 Andrew Koenig在1995年造了anti-pattern这个词,灵感来自于GoF的《设计模式》一书。而这本书则在软件领域引入了“设计模式”(design pattern)的概念。三年后antipattern因《AntiPatterns》这本书而获得普及,而它的使用也从软件设计领域扩展到了日常的社会互动中。按《AntiPatterns》作者的说法,可以用至少两个关键因素来把反面模式和不良习惯、错误的实践或糟糕的想法区分开来: 行动、过程和结构中的一些重复出现的乍一看是有益的,但最终得不偿失的模式 在实践中证明且可重复的清晰记录的重构方案 很多反面模式只相当于是错误、咆哮、不可解的问题、或是可能可以避免的糟糕的实践,它们的名字通常都是一些用反话构成的词语。有些时候陷阱(pitfalls)或黑色模式(dark patterns)这些不正式的说法会被用来指代各类反复出现的糟糕的解决方法。因此,一些有争议的候选的反面模式不会被正式承认。 这个概念很容易推广到工程学以及工程以外需要人们付出努力去争取的领域。尽管在工程学以外很少用到这个术语,但其概念是通用的。

二、举例

社会和组织结构

组织结构

从天而降的责任(Accidental Ownership):雇员们接手了一个与当前系统完全无关的系统,在没有合适的训练、学习或关心下就得维护它

分析瘫痪(Analysis paralysis):花费太多精力在项目的分析阶段 血刃(Bleeding edge,刀锋):采用一些未经测试和/或尚不稳定的前沿技术来运营,从而导致成本超支、表现/性能不佳,和/或交付延期。

摇钱树(cash cow):盈利的老产品通常会导致对新产品的自负

委员会设计(Design by committee):很多人同时进行设计,却没有统一的看法

承诺升级(Escalation of commitment):明知错了还不能收回之前的决定

独裁管理(Management by perkele):用完全听不进异议的独裁作风进行管理

目标管理(Management by objectives):通过数字管理,过于关注非本质而或不易取得的数字指标 道德风险(Moral hazard):不让做决定的人知道他的决定会带来什么结果

蘑菇管理(Mushroom management):不通知或是错误地通知雇员信息。雇员像蘑菇一样在黑暗中吸取养分,自生自灭

海鸥式管理(Seagull management):只有当出现问题的时候管理人员才会跟雇员进行接触和互动的管理模式。典型的场景就是,海鸥式的管理人员“飞”过来,嘁嘁喳喳,是人都批评一通,尔后“飞”走了!

烟囱式管理(Stovepipe or Silos,竖井式/发射井式/谷仓式管理):组织结构是由若干彼此孤立的团队组成,并且整个组织结构的范围内,上下沟通交流能够有效进行,而水平/横向的则不然。结构上支持数据主要在上下方面的流动,却禁止跨部门的通信。

厂商陷阱(Vendor lock-in,供应商套牢,供应商陷阱,厂商泥潭):使一个系统过于依赖于外部所提供的组件/部件。

项目管理

雪崩模型(Avalanche):不合理地混搭或者说混合使用瀑布模型与敏捷开发方法。

死亡征途(Death march,死亡之旅):除了CEO,每个人都知道这个项目会成为一场灾难,但是真相却被隐瞒下来,以免项目被立即取消。(尽管CEO通常知道并且仍然继续试图最大化利润。)然而,真相被隐藏起来,直到大限来临(“Big Bang”)。另一种定义:雇员由于不合理的deadline,被迫在深夜和周末加班。