Welcome

首页 / 软件开发 / 数据结构与算法 / 设计模式自动化

设计模式自动化2013-10-08 infoq 邵思华译简介

软件开发项目正在变得日趋庞大与复杂。越是复杂的项目,其软件开发与维护的成本越有可能远远超过花费 在硬件上的成本。

软件的规模与其开发和维护的成本之间存在着一种超线性的关系。说到底,庞大且复杂的软件需 要优秀的工程师进行开发与维护,而优秀的工程师总是难以吸引的,留住他们的代价也更高昂。

尽管维护每行代码 的成本如此高昂,但我们依然编写了大量的样板代码,而这其中有很大一部分可以由更智能的编译器来替代完成。实际上, 多数模板代码只是重复地实现设计模式,而其中一部分模式已被理解得十分透彻,只要我们教会编译器一些技巧,它们完全 是可以自动实现的。

实现观察者模式

以观察者模式作为例子。这个模式在1995年就已被早早地提出了,并且 成为了Model-View-Controller架构成功实现的基础。组成这个模式的各元素在首个版本的Java(1995,Observable接口) 和.NET(2001,INotifyPropertyChanged接口)中都得到了实现。虽然这些接口都是框架中的一部分,但还是需要开发者的 手动实现。

INotifyPropertyChanged接口仅包含一个名叫PropertyChanged的事件,当对象的任何一个属性值发生变 化时,都需要触发该事件。

让我们来看一看一个简单的.NET示例:

 

public Person : INotifyPropertyChanged{ string firstName, lastName; public event NotifyPropertyChangedEventHandler PropertyChanged;protected void OnPropertyChanged(string propertyName){if ( this.PropertyChanged != null ) { this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); }}public string FirstName{ get { return this.firstName; }set{ this.firstName = value; this.OnPropertyChanged(“FirstName”); this.OnPropertyChanged(“FullName”);}public string LastName{ get { return this.lastName; }set{ this.lastName = value; this.OnPropertyChanged(“LastName”); this.OnPropertyChanged(“FullName”);}public string FullName { get { return string.Format( “{0} {1}“, this.firstName, this.lastName); }}}