【HITSC】软件构造笔记六

目录

6.1 面向可复用性和可维护性的设计模式:

1. Factory Method 工厂方法:

2.Adapter 适配器模式:

3.Decorator装饰器模式:

 4.Strategy 策略模式:

​编辑

5.Template Method 模板模式: 

​编辑

6. Observer 观察者模式:

7. Visitor:

8 、共性和差异

Strategy vs. visitor

6.2 正则表达式


6.1 面向可复用性和可维护性的设计模式:

  • 设计模式:
    • 创建型模式 Creational patterns:
      • Factory method pattern
    • 结构型模式 Structural patterns:
      • Adapter
      • Decorator
    • 行为类模式 Behavioral patterns:
      • Strategy
      • Template method
      • Iterator
      • Visitor
    • 除了类本身,设计模式更强调多个类/对象之间的关系和交互过程--比接口/类复用的粒度更大

1. Factory Method 工厂方法:

  • 又称“虚拟构造器
  • 解决的问题:当client不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。

    定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。

    当然也可以通过直接定义静态工厂方法来创建子类实例。

  • 例:

          相比于通过构造器(new)构建对象:
        1. 静态工厂方法可具有指定的更有意义的名称
        2. 不必在每次调用的时候都创建新的工厂对象
        3. 可以返回原返回类型的任意子类型 
注:每增加一种产品,就需要增加一个新的工厂子类

2.Adapter 适配器模式:

解决的问题:解决类之间接口不兼容的问题

方式:通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类。
例:

3.Decorator装饰器模式:

  • 即用每个子类实现不同的特性
  • 以递归的方式实现
  • 接口:定义装饰物执行的公共操作

 4.Strategy 策略模式:

有多种不同的算法来实现同一个任务,但需要client根据需要动态切换算法,而不是写死在代码里

5.Template Method 模板模式: 

做事情的步骤一样,但具体方法不同
注: 使用继承和重写实现模板模式

6. Observer 观察者模式:

解决的问题:“粉丝”对“偶像”感兴趣,希望随时得知偶像的一举一动。

粉丝到偶像那里注册,偶像一旦有新闻发生,就推送给已注册的粉丝(回调callback粉丝的特定功能)。这是一个双向delegate的关系,例:

7. Visitor:

解决的问题:对特定类型的object的特定操作(visit),在运行时将二者动态绑定到一起,该操作可以灵活更改,无需更改被visit的类。

为ADT预留一个将来可扩展功能的“接入点”,外部实现的功能代码可以在不改变ADT本身的情况下通过delegation接入ADT

本质上是将数据和作用于数据上的某种/些特定操作分离开来。

8 、共性和差异

Strategy vs. visitor

  • 同:二者都是通过delegation建立两个对象的动态联系

  • Visitor:强调是的外部定义某种对ADT的操作,该操作于ADT自身关系不大(只是访问ADT),故ADT内部只需要开放accept(visitor)即可,client通过它设定visitor操作并在外部调用。

    visitor是站在外部client的角度,灵活增加对ADT的各种不同操作(哪怕ADT没实现该操作)。

  • Strategy:强调是对ADT内部某些要实现的功能的相应算法的灵活替换。这些算法是ADT功能的重要组成部分,只不过是delegate到外部strategy类而已。

    strategy是站在内部ADT的角度,灵活变化对其内部功能的不同配置。

6.2 正则表达式

正则语法:简化之后可以表达为一个产生式而不包含任何非终止节点。不能有非终止节点。

所以一个正则表达式应该是这样的:markdown ::= ([^_]* | ‘_’ [^_]* ‘_’ )*

去除引号和空格,从而表达更简洁(更难懂):markdown ::= ([^_]*|_[^_]*_)*

为了简化表示,定义了一些简化的表示方式:

  • . : 表示任意字符
  • \d:表示任意整数,意义同[0-9]
  • \s:任何空格字符,包括空格,制表符,换行符
  • \w:任何单词字符,包括下划线,意义同[a-zA-Z_0-9]
  • \.,,,,\*,\+,…: 对操作符或特殊字符进行转义,以便从字面上匹配
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值