设计模式相关 小题
10.当对一个对象的改变需要同时改变其它对象,但它不知道其它对象是谁,并且也不知道具体有多少对象有待改变时,我们应该使用()
A、责任链(Chain of Responsibility)
B、观察者(Observer)
C、模板方法(Template Method)
D、代理(Proxy)
答案:B、观察者(Observer)。
观察者模式是一种行为设计模式,它定义了一种一对多的依赖关系,让多个对象同时监听某一个主题对象,当主题对象状态发生改变时,它的所有依赖者都会收到通知并自动更新。在本题中,需要同时改变其它对象,但不知道具体有多少对象需要改变,这正是观察者模式所擅长的场景。当被观察对象发生变化时,观察者对象会自动接收到通知并作出相应的反应,这样能够保证系统的松耦合性,同时也更加容易扩展。责任链模式、模板方法模式、代理模式虽然也有一定的灵活性和扩展性,但并不太适合本题中描述的问题。
以下是另外三个选项的简要介绍:
A、责任链(Chain of Responsibility):责任链模式是一种行为设计模式,它使得多个对象都有机会处理请求,从而避免了请求发送者和接收者之间的耦合关系。在该模式中,所有的接收者都拥有一个处理请求的机会,但具体由哪个接收者来处理请求则是在运行时动态确定的。使用责任链模式可以有效地降低系统的耦合度,同时处理请求的对象也可以灵活地组成链式结构。
C、模板方法(Template Method):模板方法模式是一种行为设计模式,它定义了一个操作中的算法骨架,将一些步骤延迟到子类中实现。在该模式中,模板方法定义了操作中基本的执行流程和一些具体的方法实现,而具体的实现则由子类来完成。模板方法模式的主要优点是降低了代码重复率,同时也提高了系统的可维护性和可扩展性。
D、代理(Proxy):代理模式是一种结构性设计模式,它为一个对象提供一个代理,从而控制对原始对象的访问。在该模式中,代理对象与被代理对象实现了相同的接口,代理对象可以直接使用原始对象的方法和属性,同时还可以在原始对象方法的基础上添加或修改一些额外的行为。使用代理模式可以实现远程代理、虚拟代理、缓存代理等多种形式,从而更好地控制系统的访问和使用。
责任链和观察者模式有什么区别
责任链模式和观察者模式虽然都是行为设计模式,但是它们的目的和应用场景有很大的区别。
责任链模式用于处理请求的解耦合,每个处理者都可以对请求进行处理,但是该请求是按照链式结构依次传递下去的。当客户端提交一个请求时,请求会先由第一个处理者处理,如果该处理者不能够处理该请求,处理权就会传递给下一个处理者去处理,直到找到可以处理该请求的处理者,或者所有的处理者都不能够处理该请求时,请求就会终止。
观察者模式用于对象之间的解耦合,当一个对象发生状态变化时,所有注册的观察者对象都会收到通知并作出相应的反应,从而实现对象之间的松耦合关系。该模式中包含的角色有:目标(被观察者),观察者,具体目标和具体观察者。被观察者的状态发生变化时,会调用观察者注册的通知方法,并将状态信息传递给观察者,观察者作出相应的反应。
因此,责任链模式主要用于解决对象之间的依赖关系,将请求的处理过程通过链式结构进行分解,从而降低各个对象之间的耦合度;而观察者模式主要用于解耦对象之间的状态变化,使得对象之间可以更加灵活地进行通信和交互。
(都是字,看到眼晕。回头学一下, 补充一下图片和视频信息)