码迷,mamicode.com
首页 > 其他好文 > 详细

软件构造 第五章第二节 设计可复用的软件

时间:2018-06-22 17:38:17      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:四种   tor   阶段   observer   通配   define   over   替换   osi   

第五章第二节  设计可复用的软件

1.LSP

-Subtypes can add, but not remove methods 子类型可以增加方法,但不可删

– Concrete class must implement all undefined methods 子类型需要实现抽象

类型中的所有未实现方法

– Overriding method must return same type or subtype 子类型中重写的方法

必须有相同或子类型的返回值

– Overriding method must accept the same parameter types 子类型中重写的

方法必须使用同样类型的参数

– Overriding method may not throw additional exceptions 子类型中重写的方

法不能抛出额外的异常

 

– Same or stronger invariants 更强的不变量

– Same or weaker preconditions 更弱的前置条件

– Same or stronger postconditions 更强的后置条件

 

强行为子类型化

技术分享图片

 

协变:

父类型->子类型:越来越具体specific

返回值类型:不变或变得更具体

异常的类型:也是如此

 

反协变

父类型->子类型:越来越具体specific

参数类型:要相反的变化,要不变或越来越抽象

 

2.数组是协变的

技术分享图片

 

3、泛型中的LSP

使用通配符"?"

技术分享图片

 

  • 泛型是类型不变的(泛型不是协变的)。举例来说 
    • ArrayList<String> List<String>的子类型 
    • List<String>不是List<Object>的子类型
  • 在代码的编译完成之后,泛型的类型信息就会被编译器擦除。因此,这些类型信息并不能在运行阶段时被获得。这一过程称之为类型擦除(type erasure)。
  • 类型擦除的详细定义:如果类型参数没有限制,则用它们的边界或Object来替换泛型类型中的所有类型参数。因此,产生的字节码只包含普通的类、接口和方法。
  • 类型擦除的结果: <T>被擦除 T变成了Object

 

4. Delegation and Composition

如果要用Collections.sort()

 

 

方法一:继承comopartor

Override:int compare(T o1, T o2)

技术分享图片

 

方法二:实现comparable

写ompareTo()函数

技术分享图片

 

复合继承原则(CRP

  • 复合复用原则(CRP):类应当通过它们之间的组合(通过包含其它类的实例来实现期望的功能)达到多态表现和代码复用,而不仅仅是从基础类或父类继承。 
  • 我们可以将组合(Composition)理解为(has a)而继承理解为(is a)
  • 例子:
  • 技术分享图片

 

技术分享图片

 

 

四种deletion方式:

  • 临时性委派(Dependency):最简单的方法,调用类里的方法(use a),其中一个类使用另一个类而不实际地将其作为属性。技术分享图片
  • 永久性委派(Association):类之中有其它类的具体实例来作为一个变量(has a技术分享图片
  • 更强的委派,组合(Composition):更强的委派。将一些简单的对象组合成一个更为复杂的对象。(is part of技术分享图片
  • 聚合(Aggregation:对象是在类的外部生成的,然后作为一个参数传入到类的内部构造器。(has a)技术分享图片

 

框架:

框架分为白盒框架和黑盒框架。 

  • 白盒框架: 
    • 通过子类化和重写方法进行扩展(使用继承); 
    • 通用设计模式:模板方法; 
    • 子类具有主要方法但对框架进行控制。
  • 黑盒框架: 
    • 通过实现插件接口进行扩展(使用组合/委派); 
    • 常用设计模式:Strategy, Observer  
    • 插件加载机制加载插件并对框架进行控制。

软件构造 第五章第二节 设计可复用的软件

标签:四种   tor   阶段   observer   通配   define   over   替换   osi   

原文地址:https://www.cnblogs.com/masteryellow/p/9214312.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!