2026-02-06 23:26:02
什么是装饰模式?装饰器模式允许在不改变一个类结构的情况下,动态地为其添加新的功能。
装饰模式和桥接模式的区别是什么?
装饰模式:核心作用是动态地给一个对象添加一些额外的职责。
桥接模式:核心作用是将抽象部分与实现部分分离,使它们都可以独立的变化。
什么是外观模式?什么情况下会使用到外观模式?外观模式隐藏了一个复杂系统的内部功能实现,并为客户端提供了一个统一的访问接口。使用场景包括:
为复杂的模块或子系统提供外界访问的模块。
实现子系统的独立。
迪米特法则(又称最少知道原则):一个对象应该对其他对象有最少的了解。
什么是责任链模式?责任链模式为请求创建了一个接收者对象的链,实现了请求发送者和接收者的解耦。在责任链模式下,若一个对象不能处理该请求,则将请求传给下一个接收者,并依次类推。
责任链模式在我们学到的哪些技术中用到了?常用的业务场景是什么样的?
应用实例:Tomcat中encoding的处理,Servlet中的Filter。
常用场景:
多个对象处理一个请求,但具体由哪个对象处理运行时决定。
在不明确指定接收者的情况下,向多个对象提交一个请求。
需要动态地指定一组对象处理某个请求。
系统中对象之间存在着较为复杂的引用关系,使得他们结构混乱。
想通过一个中间类封装多个类中的行为,而又不想生成太多的子类。
特点:将请求封装为一个对象,降低了系统的耦合度。
常用场景:凡是带有命令的地方都可以使用命令模式,如数据库事务机制底层架构实现、撤销和恢复功能等。
什么是解释器模式,特点是什么?什么场景下使用这个设计模式?解释器模式提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。
特点:灵活、扩展性高;增加了新的解释表达式的方式;容易实现简单的文法。
使用场景:
将一个需要解释执行的语言中的句子表示为一个抽象语法树。
一些重复出现的问题可以用一种简单的语言进行表达。
一个简单语法需要解释的场景,如SQL解析、符号处理引擎等。
访问者模式(虽未直接提及,但通常与解释器模式一同讨论):用于将数据操作与数据结构分离。
特点:定义了系列的算法,把它们一个个封装起来,并且使它们可相互替换。
使用场景:
系统中存在许多相似的类,他们仅是行为不同。
一个系统需要动态的选择算法。
什么是模板方法模式?模板方法模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
什么是钩子函数?钩子函数是某个系统消息被触发时被系统调用的回调函数。
什么是好莱坞原则?子类不能调用父类,调用过程由父类完全控制。
特点:
封装了转换规则。
枚举可能的状态,在枚举状态之前需要确定状态的种类。
将状态封装为一个对象,仅需要改变该状态对象就可以实现改变行为。
使用场景:
对象行为随状态而改变的场景。
用于替代条件、分支语句。
特点:实现了对象之间的松耦合。
使用场景:
一个抽象模型有两个方面,其中一个方面依赖于另一个方面。
一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变。
需要在系统中创建一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象……,可以使用观察者模式创建一种链式触发机制。
特点:
能够比较方便的恢复到某个特定的历史状态。
实现了信息的封装,用户无需关注信息保存的细节。
使用场景:
涉及保存/恢复数据的场景。
支持事务回滚操作的场景。