首先看老师给的ppt,这个是老师给的复习纲要,是考试必看的内容 https://www.kdocs.cn/l/crrDo9eWBhHX[金山文档] 总复习 - 修改.pptx
面向对象的设计原则
在面向对象软件开发过程中,采用设计模式可以复用相似问题的相同解决方案;
7个常用的面向对象原则
单一职责原则;开闭原则;里氏代换原则;依赖倒转原则;接口隔离原则;合成复用原则;迪米特法则。
开闭原则定义
软件实体应当对扩展开放,对修改关闭。实现开闭原则的关键在于对系统进行抽象化。
里氏代换原则定义
所有引用基类的地方必须能透明地使用其子类的对象。所以如果一个方法能够接受一个基类对象作为其参数,必然可以接受一个子类对象。
依赖倒转原则的定义
高层模块不应该依赖于低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节可以依赖于抽象
单一职责原则定义
一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。分析:一个类承担的职责越多,它被复用的可能性越小,而且如果一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作。
一个类承担的职责越多,越容易复用,被复用的可能性越大。—-不对
简单工厂模式
在简单工厂模式中,如果需要增加新的具体产品,通常需要修改*类的源代码
package simplefactorypublic class TVFactory{public statie Ty producerv(string brand) throws Exception{if(brand.eualstgnoreCase ("Haier")){System.out.printIn("电视机工厂生产海尔电视机!");return new HaierTV();}else if(brand.equalsIgnoreCase("Hisense")){System.out.printIn("电视机工厂生产海信电视机!");return new HisenseTv();}else{throw new Exceptien("对不起, 暂不能生产该品牌电视机!");}}}
在简单工厂模式中,如果需要增加新的具体产品,通常需要修改工厂类的源代码
工厂方法模式
不同品牌的手机应该由不同的公司制造,三星公司生产三星手机,苹果公司生产苹果手机。该场景蕴含了工厂方法模式。
工厂方法模式对应唯一一个产品等级结构
- 模式动机

- 简单工厂
工厂方法模式

抽象工厂模式
某公司要开发一个图表显示系统,在该系统中曲线图生成器可以创建曲线图曲线图图例和曲线图数据标签,柱状图生成器可以创建柱状图,柱状图图例和柱状图数据标签,用户要求可以很方便地增加新的类型的图形,系统具备较好的可扩展能力,针对这种需求,采用抽象工厂模式最为恰当。
装饰模式
某公司要开发一个图形控件库,要求可以在该图形控件库中方便地增加新的控件,而且可以动态地改变控件的外观或给控件增加新的行为,如可以为控件增加复杂的立体边框,增加控件的鼠标拖拽行为等。针对上述需求,使用装饰模式进行设计最合适
当不能采用生成子类的方法进行扩充时可采用装饰设计模式动态地给一个对象添加一些额外的职责。
状态模式
银行账户根据余额不同拥有不同的存取款操作
游戏软件中根据虚拟角色级别的不同拥有不同的权限
会员系统中不同的会员等级可以实现不同的行为
不是状态模式的是:
某软件在不同的操作系统中呈现不同的外观
状态模式(State Pattern) :允许一个对象在其内部状态改变时改
变它的行为
组合模式
组合模式对叶子对象和组合对象的使用具有一致性
组合模式将对象组织到树形结构中,可以用来描述整体与部分的关系
组合模式使得可以很方便地在组合体中加入新的对象构件
客户端不需要因为加入新的对象构件而更改代码。
一个树形文件系统体现了组合模式。
现需要开发一个XML文档处理软件,可以根据关键字查询指定内容,用户可以在XML中任意选取某一结点作为查询的初始结点,无须关心该结点所处的层次结构,针对该需求可以使用组合模式进行设计。
迭代器模式
迭代器模式用于处理具有聚集性质的类
电视机遥控器的设计原理中蕴含了选代器模式。
迭代器模式的适用场景
访问一个聚合对象的内容而无须暴露它的内部表示
需要为一个聚合对象提供多种遍历方式
为遍历不同的聚合结构提供一个统一的接口,在该接口的实现类中为不同的聚合结构提供不同的遍历方式,而客户端可以一致性地操作该接口
外观模式
已知某子系统为外界提供功能服务,但该子系统中存在很多粒度十分小的类,不便被外界系统直接使用,采用外观设计模式可以定义一个高层接口,这个接
口使得这一子系统更加容易使用。
- 模式动机

一个子系统的外部与其内部的通信通过一个统一的外观类进行,外观类将客户类与子系统的内部复杂性分隔开,使得客户类只需要与外观角色打交道,而不需要与子系统内部的很多对象打交道
- 模式实例
电源总开关:实例说明
现在考察一个电源总开关的例子,以便进一步说明外观模式。为了使用方便,一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭。通过该电源总开关可以同时控制上述所有电器设备,使用外观模式设计该系统。
电源总开关:参考类图
会写关键外观类GeneralSwitchFacade代码。
GeneralSwitchFacade.java
package facade;
public class GeneralSwitchFacade {
private Light lights[]=new Light[4];
private Fan fan;
private AirConditioner ac;
private Television tv;
public GeneralSwitchFacade()
{
lights[0]=new Light("左前");
lights[1]=new Light("右前");
lights[2]=new Light("左后");
lights[3]=new Light("右后");
fan=new Fan();
ac=new AirConditioner();
tv=new Television();
}
public void on()
{
lights[0].on();
lights[1].on();
lights[2].on();
lights[3].on();
fan.on();
ac.on();
tv.on();
}
public void off()
{
lights[0].off();
lights[1].off();
lights[2].off();
lights[3].off();
fan.off();
ac.off();
tv.off();
}
}
职责链模式
接力赛跑体现了职责链模式。

- 模式实例
审批假条:实例说明
某OA系统需要提供一个假条审批的模块,如果员工请假天数小于3天,主任可以审批该假条;如果员工请假天数大于等于3天,小于10天,经理可以审批;如果员工请假天数大于等于10天,小于30天,总经理可以审批;如果超过30天,总经理也不能审批,提示相应的拒绝信息。
能写出职责链模式的client类代码
package cor;
public class Client
{
public static void main(String args[])
{
Leader objDirector,objManager,objGeneralManager,objViceGeneralManager;
objDirector=new Director("王明"); //主任
objManager=new Manager("赵强"); //经理
objGeneralManager=new GeneralManager("李波"); //总经理
// 建立职责链
objDirector.setSuccessor(objManager); // 主任上级是经理
objManager.setSuccessor(objGeneralManager); // 经理上级是总经理
LeaveRequest lr1=new LeaveRequest("张三",2);
objDirector.handleRequest(lr1);
LeaveRequest lr2=new LeaveRequest("李四",5);
objDirector.handleRequest(lr2);
LeaveRequest lr3=new LeaveRequest("王五",15);
objDirector.handleRequest(lr3);
LeaveRequest lr4=new LeaveRequest("赵六",25);
objDirector.handleRequest(lr4);
}
}
单例模式
防止一个资源管理器窗口被实例化多次用单例模式
它能够保证一个类只产生一个唯一的实例
定义:确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例
适配器模式
在对象适配器中,适配器类和适配者类之间的关系是关联关系
适配器模式将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
- 关联关系

观察者模式
我和妹妹跟妈妈说:”妈妈,我和妹妹在院子里玩,饭做好了叫我们一声。”这句话隐含着观察者模式。
解释:一个对象的状态或行为的变化将导致其他对象的状态或行为也发生改变,它们之间将产生联动。
策略模式
在某系统中用户可自行动态地选择某种排序算法(例如选择排序,冒泡排序,插入排序)来实现某功能,该系统的设计可以使用策略模式。
模版方法模式
某系统中的某子模块需要为其他模块提供访问不同数据库系统的功能,这些数据库系统提供的访问接口有一定的差异,但访问过程却是相同的。例如先连接数据库,再打开数据库,最后对数据库进行查询,可使用模板方法设计模式抽象出相同的数据库访问过程。
代理模式
Windows操作系统中的应用程序快捷方式是代理模式的应用实例。
命令模式
命令模式将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数
化。
电视机遥控器设计中使用了命令模式的思想
命令模式的适用场景:
系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。
系统需要在不同的时间指定请求,将请求排队和执行请求。
系统需要支持命令的撤销操作和恢复操作。
系统需要将一组操作组合在一起形成宏命令。
- 模式实例
电视机是请求的接收者,遥控器是请求的发送者,遥控器上有一些按钮不同的按钮对应电视机的不同操作。抽象命令角色由一个命令接口来扮演,有三个具体的命令类实现了抽象命令接口,这三个具体命令类分别代表三种操作:打开电视机、关闭电视机和切换频道。显然,电视机遥控器就是一个典型的命令模式应用实例。
这是一个老师上课讲的版本,内容少一点,重点突出,放上去的代码是老师强调的重点 如果你看完了,觉得不够,计划做一个v2版本,里面对老师一句话带过的概念进行补充,但大概率是不会考到
这个是所有课件的资料 https://kdocs.cn/join/gzyj3cd邀请你加入「设计模式-Java课件PPT」,一起文档协作
如果有遗落的,欢迎在评论区补充
分数划分
闭卷
选择题(每题2分,共15题,共30分)
填空题(每题2分,共10题,共20分)
判断题(每题2分,共5题,共10分)
简答题(每题5分,共4题,共20分)
综合应用题(每题10分,共2题,共20分)
