SC || Chapter 5 复习向
可复用性
┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉
行为子结构
对于父子的继承关系的要求:
·子类可以增加方法,但不可以删
·子类需实现抽象类型中未实现的方法
·子类重写(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 复习向的更多相关文章
- SC || Chapter 8
栈:方法调用和局部变量的存储位置,保存基本类型 堆:在一块内存里分为多个小块,每块包含 一个对象,或者未被占用
- SC || Chapter 3
┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉ 基本数据类型 && 对象数据类型 基本数据类型(int char long) 在栈中分配内存,不可变 对象数据类型(String BigInt ...
- SC || Chapter 1
第一章的重中之重就是这张图吧 (具体参见笔记) ┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉┉∞ ∞┉┉┉∞ ∞┉┉ 区分哪些属性是外部的(面向用户 ...
- SC || Chapter6 复习向 面向可维护性 我哭了
高内聚低耦合 高内聚:一个模块内部各个元素彼此结合的紧密程度,一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则 低耦合:各模块间相互联系紧密程度,模块间接口的复杂性.调用 ...
- HDOJ(HDU) 2078 复习时间
Problem Description 为了能过个好年,xhd开始复习了,于是每天晚上背着书往教室跑.xhd复习有个习惯,在复习完一门课后,他总是挑一门更简单的课进行复习,而他复习这门课的效率为两门课 ...
- USACO Chapter 1 解题总结
USACO Chapter 1 解题总结 1.1.1 Your Ride Is Here 基本字符串操作,无压力. 1.1.2 Greedy Gift Givers 基础模拟题,弄明白题意,不怕麻烦, ...
- sql语法复习:增删查改,各种数据库对象创建和函数使用
推荐工具:机子配置较低的话,可以装Gsql这个工具获得sql执行环境(可作为手册查看内置数据类型 函数和存储过程等) --之前数据库的东西接触不多,虽然基本的语法是了解,但不是很熟悉--最近项目一直在 ...
- Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Services
本文内容为转载,供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Servi ...
- Chapter 3. Programming with RDDs
Programming with RDDs This chapter introduces Spark's core abstraction for working with data, the r ...
随机推荐
- python bbs项目代码分析
def index(request, *args, **kwargs): condition={} type_id = int(kwargs.get("type_id")) if ...
- Hexo瞎折腾系列(8) - 添加评论系统
前言 Hexo的NexT主题本身就集成了一些评论系统,多说啊之类的已经关闭服务的略过不提,目前比较多人用的有畅言.来必力livere.Gitment.Gitalk.Disqus等. 我刚用的评论系统的 ...
- [Java]LinkedHashMap实现原理
1.概述 在理解了#7 介绍的HashMap后,我们来学习LinkedHashMap的工作原理及实现.首先还是类似的,我们写一个简单的LinkedHashMap的程序: LinkedHashMap&l ...
- 线程池(2)Executors.newFixedThreadPool
例子: ExecutorService es = Executors.newFixedThreadPool(5); try { for (int i = 0; i < 20; i++) { Ru ...
- NETCORE MVC模块化
NETCORE MVC模块化 ASP.NETCORE MVC模块化编程 前言 记得上一篇博客中跟大家分享的是基于ASP.NETMVC5,实际也就是基于NETFRAMEWORK平台实现的这么一个轻量级插 ...
- HTML——传统布局的使用
传统布局:使用table来做整体页面的布局 总结:这种方式来制作页面现在也不是很多了,感觉并不是很高效. 需要先用photoshop量出页面布局具体的尺寸位置,再将其划分为表格,对每个格子进行编辑. ...
- Column 'xxx' in field list is ambiguous
一 其实看一下ambiguous的翻译就好了 一开始我觉得是含糊什么的,后来找了下才知道应该是双关... 二 所以翻译过来就是 : 列'XX'在字段列表中双关 其实就是两张表有相同的字段,但是使用时, ...
- 在MVC中使用dotless后台动态解析LESSCSS的学习笔记
通过学习LessCSS,我们知道,Less是需要通过编译才能生成 .css 文件,主要使用三种方式进行编译: 1)使用第三方编译工具,在项目发布前编译好放在项目中. 2)在浏览器端解析执行,需要引用 ...
- .net framework MVC 下 Hangfire使用,时区,权限
安装 NuGet 上有几个可用的Hangfire 的软件包.如果在ASP.NET应用程序中安装HangFire,并使用Sql Server作为存储器,那么请在Package Manager Conso ...
- vue2.0:(五)、路由vue-router
好的,接下来,我们来写路由.用的是vue2.0的路由. 步骤一:配置main.js import Vue from 'vue'; import App from './App'; import rou ...