第1章 内容介绍和授课方法
1.1 Java设计模式内容介绍
1.1.1 先看几个经典的面试题
(1) 原型设计模式问题
(2) 设计模式的七大原则
(3) 金融借贷平台项目
(4) 解释器设计模式
(5) 单例设计模式
1.1.2 设计模式的重要性/应用场景
1.2 课程亮点和授课模式
第2章 设计模式七大原则
2.1 设计模式的目的
2.2 设计模式七大原则
2.3 单一职责原则
2.3.1 基本介绍
2.3.2 应用实例
(1) 方案一
(2) 方案二
(3) 方案三
2.3.3 注意事项和细节
2.4 接口隔离原则(Interface Segregation Principle)
2.4.1 基本介绍
2.4.2 应用实例
(1) 没有使用接口隔离原则的代码
(2) 使用接口隔离原则改进
2.5 依赖倒转原则
2.5.1 基本介绍
2.5.2 应用实例
(1) 传统方式
(2) 改进方式
2.5.3 依赖关系传递的三种方式
(1) 接口传递
(2) 构造方法传递
(3) setter方式传递
2.5.4 注意事项和细节
2.6 里式替换原则
2.6.1 OO中的继承性的思考和说明
2.6.2 基本介绍
2.6.3 一个程序引出的问题和思考
(1) 问题
(2) 解决方法
(3) 改进方案
2.7 开闭原则
2.7.1 基本介绍
2.7.2 应用实例
(1) 案例
(2) 改进方案
2.8 迪米特法则
2.8.1 基本介绍
2.8.2 应用实例
(1) 案例
(2) 案例改进
2.8.3 注意事项和细节
2.9 合成复用法则(Composite Reuse Principle)
2.9.1 基本介绍
2.10 设计原则核心思想
第3章 UML类图
3.1 UML基本介绍
3.2 UML图
3.3 UML类图
3.3.1 类图-依赖关系
3.3.2 类图-泛化关系(Generalization)
3.3.3 类图-实现关系(Implementation)
3.3.4 类图-关联关系(Association)
3.3.5 类图-聚合关系(Aggregation)
(1) 基本介绍
(2) 应用实例
3.3.6 类图-组合关系(Composition)
(1) 基本介绍
(2) 应用案例
第4章 设计模式概述
4.1 掌握设计模式的层次
4.2 设计模式介绍
4.3 设计模式类型
第5章 单例设计模式
5.1 单例设计模式介绍
5.2 单例设计模式八种方式
5.2.1 饿汉式(静态常量)
(1) 应用实例
(2) 优缺点说明
5.2.2 饿汉式(静态代码块)
(1) 应用实例
(2) 优缺点说明
5.2.3 懒汉式(线程不安全)
(1) 应用实例
(2) 优缺点说明
5.2.4 懒汉式(线程安全,同步方法)
(1) 应用实例
(2) 优缺点说明
5.2.5 懒汉式(线程不安全,同步代码块)
(1) 应用实例
(2) 优缺点说明
5.2.6 双重检查
(1) 应用实例
(2) 优缺点说明
5.2.7 静态内部类
(1) 应用实例
(2) 优缺点说明
5.2.8 枚举
(1) 应用实例
(2) 优缺点说明
5.3 单例模式在JDK应用的源码分析
5.4 单例模式注意事项和细节说明
第6章 工厂模式
6.1 简单工厂模式
6.1.1 一个具体需求
6.1.2 使用传统的方式来完成
(1) 思路分析
(2) 代码实现
(3) 传统方式的优缺点
(4) 改进的思路分析
6.1.3 简单工厂模式基本介绍
6.1.4 使用简单工厂模式
(1) 代码实现
(2) 分析扩展
6.2 工厂方法模式
6.2.1 看一个新的需求
(1) 思路一
(2) 思路二
6.2.2 工厂方法模式介绍
(1) 工厂方法模式设计方案
(2) 工厂方法模式
(3) 工厂方法模式应用案例
6.3 抽象工厂模式
6.3.1 基本介绍
6.3.2 应用实例
6.4 工厂模式在JDK-Calendar应用的源码分析
6.5 工厂模式小结
第7章 原型模式
7.1 克隆羊问题
7.1.1 传统方式解决克隆羊问题
(1) 思路分析(图解)
(2) 代码实现
(3) 传统方式的优缺点
(4) 改进的思路分析
7.2 原型模式基本介绍
7.2.1 基本介绍
7.2.2 原理结构图-UML类图
7.2.3 原型模式解决克隆羊问题
7.3 原型模式在Spring框架中源码分析
7.4 深入讨论-浅拷贝和深拷贝
7.4.1 浅拷贝的介绍
7.4.2 深拷贝基本介绍
7.4.3 深拷贝应用实例
[DeepPrototype.java]
[DeepCloneable.java]
[Client.java]
7.5 原型模式的注意事项和细节
第8章 建造者模式
8.1 盖房项目需求
8.1.1 传统方式解决盖房需求
(1) 思路分析
(2) 代码实现
(3) 传统方式的问题分析
8.2 建造者模式
8.2.1 基本介绍
8.2.2 建造者模式的四个角色*
8.2.3 建造者模式原理类图
8.3 建造者模式解决盖房需求
8.3.1 思路分析图解(类图)
8.3.2 具体实现
[House.java]
[HouseBuider.java]
[CommonHouse.java]/[HighBuilding.java]
[HouseDirector.java]
[Client.java]
8.4 建造者模式在JDK应用和源码分析
8.5 建造者模式的注意事项和细节
第9章 适配器模式
9.1 现实生活中的例子
9.2 基本介绍
9.3 工作原理
9.4 类适配器模式
9.4.1 类适配器模式介绍
9.4.2 类适配器应用实例
(1) 应用实例说明
(2) 思路分析(类图)
(3) 代码实现
[Voltage220V.java]
[Ivoltage5V.java]接口
[VoltageAdapter.java]
[Phone.java]
[Client.java]
9.4.3 类适配器模式注意事项和细节
9.5 对象适配器模式
9.5.1 对象适配器模式介绍
9.5.2 对象适配器应用实例
(1) 应用实例说明
(2) 思路分析(类图)
(3) 代码实现
[VoltageAdapter.java]
[Client.java]
9.5.3 对象适配器模式注意事项和细节
9.6 接口适配器模式
9.6.1 接口适配器模式介绍
9.6.2 接口适配器模式应用实例
(1) 应用实例一
(2) 应用实例二
1) 示意图
2) 代码实现
9.7 适配器在SpringMVC框架中的应用
(4) 代码分析+Debug 源码
(5) 模拟SpringMVC
[Controller.java]
[HandlerAdapter.java]
[DispatchServlet.java]
9.8 适配器模式的注意事项和细节
第10章 桥接模式
10.1 手机操作问题
10.1.1 传统方式解决手机操作问题
(1) 类图
(2) 传统方式分析
10.2 桥接模式(Bridge)
10.2.1 基本介绍
10.2.2 桥接模式原理类图
10.2.3 桥接模式解决手机操作问题
(1) 对应类图
(2) 代码实现
[Brand.java]接口
[Vivo.java]/[Xiaomi.java]
[Phone.java]
[FoldedPhone.java]/[UprightPhone.java]
10.3 桥接模式在JDBC的源码剖析
10.4 桥接模式的注意事项和细节
10.5 桥接模式的应用场景
第11章 装饰者设计模式
11.1 星巴克咖啡订单项目
11.1.1 方案一-较差的方案
(1) 类图
(2) 方案一问题分析
11.1.2 方案二-较好的方案
11.2 装饰者模式
11.2.1 装饰者模式定义
11.2.2 装饰者模式原理
11.2.3 用装饰者模式解决星巴克咖啡订单
(1) 用装饰者模式设计的方案
(2) 装饰者模式下的订单
(3) 代码实现
接口[Drink.java]
[Coffee.java]
[Espresso.java]/[LongBlack.java]/[ShortBlack.java]
[Decorator.java]
[Chocolate.java]/[Milk.java]/[Soy.java]
[CoffeeBar.java]使用
11.3 装饰者模式在JDK中的应用:FileterInputStream
第12章 组合模式
12.1 学校院系展示需求
12.1.1 传统方案解决学校院系展示
(1) 类图
(2)问题分析
12.2 组合模式
12.2.1 基本介绍
12.2.2 组合模式的原理类图
12.2.3 组合模式解决的问题
12.2.4 组合模式解决学校院系展示
(1) 应用实例要求
(2) 思路分析和图解(类图)
(3) 代码实现
[OrganizationComponent.java]
[University.java]
[College.java]
[Department.java]
[Client.java]
12.3 组合模式在JDK集合中的应用:HashMap
12.4 组合模式的注意事项和细节
第13章 外观模式
13.1 影院管理项目
13.1.1 传统方式解决影院管理
13.1.2 传统方式解决影院管理问题分析
13.2 外观模式
13.2.1 外观模式基本介绍
13.2.2 外观模式原理类图
13.2.3 外观模式解决影院管理
13.2.4 外观模式应用实例
(1) 思路分析和图解(类图)
(2) 代码实现
[DVDPlayer.java]
[Popcorn.java]
[HomeTheaterFacade.java]
[Client.java]
13.3 外观模式在MyBatis框架应用的源码分析
13.4 外观模式的注意事项和细节
第14章 享元模式
14.1 展示网站项目需求
14.1.1 传统方案解决网站展现项目
14.1.2 传统方式的问题分析
14.2 享元模式
14.2.1 基本介绍
14.2.2 享元模式的原理类图
(1) 对原理图的说明(即模式的角色及职责)
(2) 内部状态和外部状态
14.2.3 享元模式解决网站展现项目
(1) 思路分析和图解(类图)
(2) 代码实现
[Website.java]
[ConcreteWebsite.java]
[WebsiteFactory.java]
[User.java]
[Client.java]
14.3 享元模式在JDK-Integer中的应用
14.4 享元模式的注意事项和细节
第15章 代理模式
15.1 代理模式Proxy
15.1.1 基本介绍
15.1.2 代理模式示意图
15.2 静态代理
15.2.1 静态代码模式的基本介绍
15.2.2 应用实例
(1) 具体要求
(2) 思路分析图解(类图)
(3) 代码实现
[ITeacher.java]
[TeacherDao.java]
[TeacherDaoProxy.java]
[Client.java]
15.2.3 静态代理优缺点
15.3 动态代理
15.3.1 动态代理模式的基本介绍
15.3.2 JDK中生成代理对象的API
15.3.3 动态代理应用实例
(1) 思路图解(类图)
(2) 代码实现
[IteacherDao.java]
[TeacherDao.java]
[ProxyFactory.java]
[Client.java]
15.4 Cglib代理
15.4.1 Cglib代理模式的基本介绍
15.4.2 Cglib代理模式实现步骤
15.4.3 Cglib代理模式应用实例
(1) 思路图解(类图)
(2) 代码实现+Debug源码
[TeacherDao.java]
[ProxyFactory.java]
[Client.java]
15.5 几种常见的代理模式介绍—几种变体
第16章 模板方法模式
16.1 豆浆制作问题
16.2 模板方法模式
16.2.1 基本介绍
16.2.2 模板方法模式原理类图
16.2.3 模板方法模式解决豆浆制作问题
(1) 思路分析和图解(类图)
(2) 代码实现
[SoyaMilk.java]
[RedBeanSoyaMilk.java]
[PeanutSoyMilk.java]
[Client.java]
16.2.4 模板方法模式的钩子方法
[SoyaMilk.java]
[PureSoyaMilk.java]
[Client.java]
16.3 模板方法模式在Spring框架中的应用
16.4 模板方法模式的注意事项和细节
第17章 命令模式
17.1 智能生活项目需求
17.2 命令模式
17.2.1 基本介绍
17.2.2 命令模式的原理类图
17.2.3 命令模式解决智能生活项目
(1) 思路分析和图解
(2) 代码实现
[Command.java]
[LightReceiver.java]
[LightOnCommand.java]
[LightOffCommand.java]
[NoCommand.java]
[RemoteController.java]
[Client.java]
17.3 命令模式在Spring框架JdbcTemplate中的应用
17.4 命令模式的注意事项和细节
第18章 访问者模式
18.1 测评系统的需求
18.1.1 传统方案
18.2 访问者模式
18.2.1 基本介绍
18.2.2 访问者模式的原理类图
18.2.3 访问者模式应用实例
(1) 思路分析和图解(类图)
(2) 代码实现
[Action.java]
[Success.java]/[Fail.java]
[Person.java]
[Man.java]/[Woman.java]
[ObjectStructure.java]
[Client.java]
(3) 应用案例的小结-双分派
18.3 访问者模式的注意事项和细节
第19章 迭代器模式
19.1 显示学校院系结构需求
19.1.1 传统的设计方案
(1) 类图
(2) 传统方式的问题分析
19.2 迭代器模式
19.2.1 基本介绍
19.2.2 原理类图
19.2.3 应用实例
(1) 设计思路分析
(2) 代码实现
[Department.java]
[ComputerCollegeIterator.java]
[InfoCollegeIterator.java]
[College.java]
[ComputerCollege.java]
[InfoCollege.java]
[OutputImpl.java]
[Client.java]
19.3 迭代器模式在JDK-ArrayList集合中的应用
19.4 迭代器模式的注意事项和细节
第20章 观察者模式
20.1 天气预报项目需求
20.1.1 设计方案1—普通方案
(1) WheatherData类
(2) 代码实现
[CurrentConditions.java]
[WeatherData.java]
[Client.java]
(3) 问题分析
20.2 观察者模式
20.2.1 观察者模式原理
20.2.2 观察者模式解决天气预报需求
(1) 类图说明
(2) 代码实现
[Subject.java]
[Observer.java]
[WeatherData.java]
[CurrentCondition.java]/[BaiduSite.java]
[Client.java]
(3) 好处
20.3 观察者模式在JDK应用的源码分析
第21章 中介者模式
21.1 智能家庭管理问题
20.1.1 传统方案解决智能家庭管理问题
20.1.2 传统方式的问题分析
21.2 中介者模式
21.2.1 基本介绍
21.2.2 中介者模式的原理类图
21.2.3 中介者模式应用实例
(1) 思路分析和图解(类图)
(2) 代码实现
[Mediator.java]
[Colleague.java]
[ConcreteMediator.java]
[Alarm.java]
[CoffeeMachine.java]
[Curtains.java]/[TV.java]
[ClientTest.java]
21.3 中介者模式的注意事项和细节
第22章 备忘录模式
22.1 游戏角色状态恢复问题
22.1.1 传统方案解决游戏角色恢复
22.1.2 传统方式的问题分析
22.2 备忘录模式
22.2.1 基本介绍
22.2.2 原理类图
22.2.3 原理类图代码实现
[Originator.java]
[Memento.java]
[CareTaker.java]
[Client.java]
22.2.4 游戏角色恢复状态实例
(1) 思路分析和图解(类图)
(2) 代码实现
[Memento.java]
[CareTaker.java]
[GameRole.java]
[Client.java]
22.3 备忘录模式的注意事项和细节
第23章 解释器模式
23.1 四则运算问题
23.1.1 传统方式解决四则运算问题分析
23.2 解释器模式
23.2.1 基本介绍
23.2.2 原理类图
23.2.3 解释器模式实现四则运算
(1) 思路分析和图解
(2) 代码实现
[Expression.java]
[VarExpression.java]
[SymbolExpression.java]
[AddExpression.java]
[SubExpression.java]
[Calculator.java]
[ClientTest.java]
23.3 解释器模式在Spring框架中的应用
23.4 解释器模式的注意事项和细节
第24章 状态模式
24.1 APP抽奖活动问题
24.2 状态模式
24.2.1 基本介绍
24.2.2 原理类图
24.2.3 状态模式解决APP抽奖问题
(1) 思路分析和图解(类图)
(2) 代码实现
[State.java]
[NoRaffleState.java]
[CanRaffleState.java]
[DispenseState.java]
[DispenseOutState.java]
[RaffleActivity.java]
[ClientTest.java]
24.3 状态模式在实际项目-借贷平台的应用分析
24.3.1 传统方式
24.3.2 使用状态模式
(1) 状态图
(2) 关系表
(3) 类图
(4) 代码实现
[State.java]
[AbstractState.java]
[AllState.java]
[StateEnum.java]
[Context.java]
[ClientTest.java]
24.4 状态模式的注意事项和细节
第25章 策略模式
25.1 鸭子项目
25.1.1 传统方式解决鸭子问题
(1) 传统的设计方案(类图)
(2) 代码实现
[Duck.java]
[WildDuck.java]
[PekingDuck.java]
[ToyDuck.java]
25.1.2 传统方式实现的问题分析和解决方案
25.2 策略模式
25.2.1 基本介绍
25.2.2 策略模式的原理类图
25.2.3 策略模式解决鸭子问题
(1) 思路分析(类图)
(2) 代码实现
[FlyBehavior.java]/[QuackBehavior.java]
[GoodFlyBehavior.java]/[BadFlyBehavior.java]/[NoFl
[Duck.java]
[WildDuck.java]
[PekingDuck.java]/[ToyDuck.java]
[Client.java]
25.3 策略模式在JDK-Arrays中的应用分析
25.4 策略模式的注意事项和细节
第26章 职责链模式
26.1 OA系统采购审批需求
26.1.1 传统方案解决OA系统审批
(1) 传统的设计方案(类图)
(2) 传统方案解决OA系统审批问题分析
26.2 职责链模式
26.2.1 基本介绍
26.2.2 原理类图
26.2.3 职责链模式解决OA系统采购审批
(1) 思路分析和图解(类图)
(2) 代码实现
[PurchaseRequest.java]
[Approver.java]
[DepartmentApprover.java]/ [CollegeApprover.java]/
[Client.java]
26.3 职责链模式在SpringMVC框架中的应用分析
26.3.1 SpringMVC 请求流程简图
26.3.2 代码分析
26.3.3 Debug源码+说明
26.4 职责链模式的注意事项和细节