可复用性

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉

行为子结构

对于父子的继承关系的要求:

·子类可以增加方法,但不可以删

·子类需实现抽象类型中未实现的方法

·子类重写(override)的方法必须有相同的返回值和参数列表

·子类不能抛出额外的异常

对于具体的方法:

·更强的不变量

·更弱的前置条件

·更强的后置条件

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉

协变与逆变

协变:从父类型到子类型,返回值或异常的类型不变或变得更具体

逆变:从父类型到子类型,参数变得越来越抽象(不允许)

不变:只是重写了方法

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉

【LSP】

子类可以扩展父类的功能,但不能修改父类原有的功能

子类可以有自己的个性

子类覆盖或实现父类的方法时输入参数可以变抽象,返回值变具体

(留坑)

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉

子类只需要复用父类中的一小部分方法,可以不需要通过继承,而通过委派来完成

组合的例子:

对于不同的子类对象,委派能计算它的奖金的方法,就不需要在子类继承的时候每个子类里都进行重写

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉

【可复用的设计模式】

  • 结构型模式:Structural patterns

    • 适配器模式(Adapter)
    • 装饰器模式(Decorator )
    • 外观模式(Facade)
  • 行为类模式:Behavioral patterns 
    • 策略模式(Strategy)
    • 模板方法模式(Template method)
    • 迭代器模式( Iterator)

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉

结构型模式:

适配器模式 Adaptor

增加一个接口,将已存在的子类封装起来,client面向接口编程

装饰器模式 Decorator

替代继承,向一个现有的类中添加新的功能

这种模式创建了一个装饰类,用来包装原有的类

Stack s = new ArrayStack(); //构建一个普通的堆栈
UndoStack s = new UndoStack(new ArrayStack()); //构建撤消堆栈
SecureStack s = new SecureStack( new SynchronizedStack( new UndoStack(s)))//构建安全的同步撤消堆栈

这样一层层的实现就是Decorator模式

外观模式 Facade

提供一个统一的接口来代替小接口的调用,相当于对复杂系统做了封装,供客户端简洁的使用

┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉

行为型模式:

策略模式 Strategy

创建表示各种模式的对象和一个行为随着不同对象策略而改变的context,策略对象改变context执行的算法

public interface AStrategy {
public abstract a();
}
// 一个策略对象
public class B implements AStrategy { // 还可以有 C D 等等不同的策略对象
// fields
// Constructor
@Override
public double a() {
// 不同的策略对象这里不一样
}
} public class AContext {
public double a(AStrategy aStrategy) {
return aStrategy.a();
}
} public class Main {
AContext context = new AContext();
double ans = context.a(new AStrategy() {});
}

模板模式 Template

抽象类定义执行它的方法/模式,子类按照需要重写方法,但调用以抽象类中的方法调用

public abstract class Edge {
// fields
public abstract boolean a();
} public class DirectedEdge extends Edge {
// different fields //constructor @Override
public boolean a() {
// method
}
}

迭代器模式 Iterator

顺序访问集合对象中的元素,又不暴露对象的内部表示

让集合类实现Iterable接口,重写 next(), hasNext(), remove()

感谢神仙!!!https://www.cnblogs.com/hithongming/p/8481372.html

SC || Chapter 5 复习向的更多相关文章

  1. SC || Chapter 8

    栈:方法调用和局部变量的存储位置,保存基本类型 堆:在一块内存里分为多个小块,每块包含 一个对象,或者未被占用

  2. SC || Chapter 3

    ┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉ 基本数据类型 && 对象数据类型 基本数据类型(int char long) 在栈中分配内存,不可变 对象数据类型(String BigInt ...

  3. SC || Chapter 1

    第一章的重中之重就是这张图吧 (具体参见笔记) ┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉ 区分哪些属性是外部的(面向用户 ...

  4. SC || Chapter6 复习向 面向可维护性 我哭了

    高内聚低耦合 高内聚:一个模块内部各个元素彼此结合的紧密程度,一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则 低耦合:各模块间相互联系紧密程度,模块间接口的复杂性.调用 ...

  5. HDOJ(HDU) 2078 复习时间

    Problem Description 为了能过个好年,xhd开始复习了,于是每天晚上背着书往教室跑.xhd复习有个习惯,在复习完一门课后,他总是挑一门更简单的课进行复习,而他复习这门课的效率为两门课 ...

  6. USACO Chapter 1 解题总结

    USACO Chapter 1 解题总结 1.1.1 Your Ride Is Here 基本字符串操作,无压力. 1.1.2 Greedy Gift Givers 基础模拟题,弄明白题意,不怕麻烦, ...

  7. sql语法复习:增删查改,各种数据库对象创建和函数使用

    推荐工具:机子配置较低的话,可以装Gsql这个工具获得sql执行环境(可作为手册查看内置数据类型 函数和存储过程等) --之前数据库的东西接触不多,虽然基本的语法是了解,但不是很熟悉--最近项目一直在 ...

  8. Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Services

    本文内容为转载,供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Servi ...

  9. Chapter 3. Programming with RDDs

     Programming with RDDs This chapter introduces Spark's core abstraction for working with data, the r ...

随机推荐

  1. 教妹学 Java:晦涩难懂的泛型

    00.故事的起源 “二哥,要不我上大学的时候也学习编程吧?”有一天,三妹突发奇想地问我. “你确定要做一名程序媛吗?” “我觉得女生做程序员,有着天大的优势,尤其是我这种长相甜美的.”三妹开始认真了起 ...

  2. PHP中GD库是做什么用的? PHP GD库介绍11111111

    什么是gd库?    gd库是php处理图形的扩展库,gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片. 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据 ...

  3. 使用BCG创建Pie

    1.新建一个BCG的对话框,添加一个文本框,并修改属性,添加成员变量,并设置Category为Control. 2.在class CCharPieDlg : public CBCGPDialog修改文 ...

  4. UIPI VS与Win7 共舞:用户界面特权隔离

    http://tech.it168.com/a2009/0924/737/000000737968.shtml [IT168 专稿]在上文中,我们介绍了操作系统服务的Session 0隔离,通过Ses ...

  5. 洛谷P4213 【模板】杜教筛(Sum)(杜教筛,莫比乌斯反演)

    传送门 坑着,联赛活着回来再填(死了就不填了) // luogu-judger-enable-o2 //minamoto #include<iostream> #include<cs ...

  6. InnoDB Monitors | SHOW ENGINE INNODB STATUS

    参考 <mysql 5.7手册>,15.17章节 InnoDB监视器提供有关InnoDB内部状态的信息. 这些信息对于性能调优非常有用.其实所谓的监视器,就是 show engine in ...

  7. jQuery EasyUI/TopJUI创建日期时间输入框

    jQuery EasyUI/TopJUI创建日期时间输入框 日期时间输入框组件 HTML 和日期输入框类似,日期时间输入框允许用户选择日期和指定的时间并按照指定的输出格式显示.相比日期输入框,它在下拉 ...

  8. shell脚本编程入门

    Linux的Shell种类众多,这里我们关注的重点是Bash. 基本语法 环境变量$PATH IO重定向:  以<改变标准输入 如:tr -d '\r' < dos-file.txt 以& ...

  9. Java程序的运行机制和JVM

    1. Java语言比较特殊, 由Java编写的程序需要经过编译步骤,但这个编译步骤不会产生特定平台的机器码,而是生成一种与平台无关的字节码(也就是.class文件).这种字节码不是可执行性的,必须使用 ...

  10. NSPhotoLibraryAddUsageDescription解决办法

    图片并保存到本地的功能,一点发现闪退了.发现 Xcode 报以下错误: The app's Info.plist must contain an NSPhotoLibraryAddUsageDescr ...