找回密码
 立即注册
首页 业界区 业界 设计模式脉络

设计模式脉络

任娅翠 2025-6-2 00:39:19
软件的可扩展性
  软件善变,可扩展性成为评价软件生命力的重要指标。
  所谓的可扩展性是指软件为了应对将来的业务变化,而提供的扩展能力。当有新的业务发生时,可扩展性较好的软件仅需小范围修改就能提供支持,它们可以保持总体上的稳定。
  传统的结构化软件设计方法在这方面力有不及,面向对象方法却有一些天然的优势。
类的扩展能力
  面向对象方法带来的扩展能力首先表现在对象(object)上。对象是面向对象软件的基本活动单元,它们封装了软件中最容易发生变化的数据和功能,其本身则相对稳定。
  对象由类(class)描述。
  我们引用乐府诗《江南》考察类的表现。
  1. // 莲蓬
  2. public class Seedpod {
  3.   private String state;// 江南可采莲
  4. }
  5. // 鱼
  6. public class Fish {
  7.   public void play() {
  8.     // 鱼戏莲叶间。鱼戏莲叶东。
  9.   }
  10. }
复制代码
  在“采莲”系统中,莲蓬由生及熟(数据变化),鱼儿在不同的地方嬉戏(功能变化),这些变化仅发生在对象或类的内部。从外部来看,“莲蓬”类和“鱼”类并没有多大变化,它们的基本结构保持稳定。
抽象类和接口的扩展能力
  当类本身不足以应对变化时,不妨对类进行一定程度的抽象。抽象化类可以舍弃一些易变因素,从而变得更加稳定。抽象化类的代表是抽象类(abstract class)和接口(interface)。
  我们使用这种方法改写刚才的例子。
  1. // 收获
  2. public abstract class Harvest {}
  3. // 嬉戏
  4. public interface Playable {
  5.   public void play();
  6. }
  7. // 莲蓬
  8. public class Seedpod extends Harvest {}
  9. // 鱼
  10. public class Fish implements Playable {
  11.   public void play() {}
  12. }
复制代码
  我们分别以“莲蓬”类和“鱼”类为基础,抽象出了“收获”抽象类和“嬉戏”接口。抽象类和接口舍弃了原始类中的具体内容,但保留了系统的关键特性(收获与嬉戏的乐趣)。
 “采莲”系统由此分成了两个层次:抽象层和具体层。抽象层相对稳定,具体层容易变化。
  若采莲人(Picker)一时兴起采了一朵花苞(Bud),和同伴嬉戏起来——我们只需扩充具体层的实现,不必修改抽象层的结构。
      
1.png

  构建软件时,可以把相对稳定的逻辑写在抽象层,起到提纲和约束的作用;把容易变化的逻辑写在具体层,限制变化的范围。
设计模式
  实践中如何发挥好抽象化类的优势,为软件预留好可扩展性,正是我们的主角——设计模式——重点关注的内容。
  设计模式是众人长期实践经验的总结。
  后续文章将为您介绍23种设计模式,并揭示它们的思考路径与内在联系。这些设计模式来自Erich Gamma等人合著的《Design Patterns》,这是一部广为流传的经典著作,也是这门实践经验理论化的先声。
  原著中作者将设计模式分成了创建型、结构型与行为型三种类型,由于这种分类方法具有一定的迷惑性,这里不再采用。
  我们将用一种新的分类方法重新梳理它们。
2.jpeg


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册