当前位置:   article > 正文

java设计模式问题集

java设计模式问题集

目录

1.java设计模式的六大设计原则以及它们的关系。

2.单例模式、适配器模式、装饰者模式、代理模式、外观模式、策略模式、观察者模式、责任链模式、命令模式、状态模式、中介者模式。这十一种常用的设计模式是考核的重点,你需要掌握它们的优缺点以及使用的场景。

3.适配器模式,装饰者模式,外观模式它们之间的区别是什么。

4.代理模式、策略模式、状态模式它们之间的区别是什么。

5.外观模式、中介模式它们之间的区别是什么。

6.静态代理和动态代理的区别,什么场景使用,实现动态代理的几种方式。 7.简单列举几个Android源码中使用到设计模式的例子


 

1.java设计模式的六大设计原则以及它们的关系。

       

  • 单一职责原则(SRP)

    • 每个类应该只有一个职责,即只有一个导致其变化的原因。
    • 优点:降低类的复杂度,提高代码的可读性和可维护性。
  • 开闭原则(OCP)

    • 软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
    • 优点:提高软件系统的可扩展性和可维护性。
  • 里氏替换原则(LSP)

    • 子类对象可以替换父类对象,并且程序行为不变。
    • 优点:确保程序的正确性和健壮性。
  • 依赖倒置原则(DIP)

    • 高层模块不应该依赖于低层模块,两者都应该依赖于抽象。
    • 优点:减少类之间的耦合性,提高系统的灵活性和可扩展性。
  • 接口隔离原则(ISP)

    • 客户端不应该依赖于它不需要的接口。
    • 优点:减少类之间的依赖,提高系统的灵活性和可维护性。
  • 迪米特法则(最少知道原则,LoD)

    • 一个对象应该对其他对象有最少的了解。
    • 优点:降低类之间的耦合性,提高系统的可维护性和扩展性。

2.单例模式、适配器模式、装饰者模式、代理模式、外观模式、策略模式、观察者模式、责任链模式、命令模式、状态模式、中介者模式。这十一种常用的设计模式是考核的重点,你需要掌握它们的优缺点以及使用的场景。

  • 单例模式

    • 优点:确保一个类只有一个实例,提供一个全局访问点。
    • 缺点:难以扩展,违反单一职责原则。
    • 使用场景:日志记录器、配置管理、线程池等。
  • 适配器模式

    • 优点:将不兼容的接口转换为兼容的接口。
    • 缺点:增加系统的复杂性。
    • 使用场景:旧系统与新系统的集成、第三方库的使用等。
  • 装饰者模式

    • 优点:动态地给对象添加新的功能。
    • 缺点:产生过多的小对象,增加系统复杂性。
    • 使用场景:需要动态扩展功能的场景。
  • 代理模式

    • 优点:控制对对象的访问,减少系统的耦合性。
    • 缺点:增加系统复杂性。
    • 使用场景:远程代理、虚拟代理、安全代理等。
  • 外观模式

    • 优点:提供一个简单的接口,减少系统的复杂性。
    • 缺点:增加系统的复杂性。
    • 使用场景:子系统复杂且需要统一接口时。
  • 策略模式

    • 优点:定义一系列算法,将每个算法封装起来,使它们可以互换。
    • 缺点:客户端必须知道所有策略类,增加系统复杂性。
    • 使用场景:需要动态选择算法的场景。
  • 观察者模式

    • 优点:定义对象之间的一对多依赖,当一个对象改变状态时,其依赖者都会收到通知。
    • 缺点:可能导致内存泄漏。
    • 使用场景:事件处理系统、订阅-发布系统等。
  • 责任链模式

    • 优点:解耦请求发送者和处理者,动态组合处理链。
    • 缺点:不能保证请求一定被处理。
    • 使用场景:请求的处理需要多个对象的协作时。
  • 命令模式

    • 优点:将请求封装为对象,参数化请求。
    • 缺点:可能产生大量的命令类。
    • 使用场景:需要对请求进行记录、撤销、重做等操作时。
  • 状态模式

    • 优点:允许对象在内部状态改变时改变其行为。
    • 缺点:可能导致状态类增加,系统复杂性增加。
    • 使用场景:对象的行为依赖于其状态变化的场景。
  • 中介者模式

    • 优点:用一个中介对象来封装一系列对象的交互,减少对象之间的耦合。
    • 缺点:中介者对象本身可能变得复杂。
    • 使用场景:对象之间存在复杂交互时。

3.适配器模式,装饰者模式,外观模式它们之间的区别是什么。

  • 适配器模式:将一个类的接口转换成客户希望的另一个接口。适用于接口不兼容的情况。
  • 装饰者模式:动态地给对象添加新的功能。适用于需要动态扩展功能的情况。
  • 外观模式:提供一个统一的接口,用来访问子系统中的一群接口。适用于子系统复杂且需要统一接口的情况。

4.代理模式、策略模式、状态模式它们之间的区别是什么。

  • 代理模式:为其他对象提供一个代理,以控制对这个对象的访问。主要用于访问控制和性能优化。
  • 策略模式:定义一系列算法,并将每个算法封装起来,使它们可以互换。主要用于算法的动态选择。
  • 状态模式:允许对象在内部状态改变时改变其行为。主要用于对象的行为依赖于其状态变化的场景。

5.外观模式、中介模式它们之间的区别是什么。

  • 外观模式:为子系统中的一组接口提供一个一致的接口,使得子系统更容易使用。主要用于简化子系统的使用。
  • 中介者模式:通过一个中介对象来封装对象之间的交互。主要用于减少对象之间的直接交互和耦合。

6.静态代理和动态代理的区别,什么场景使用,实现动态代理的几种方式。

  • 静态代理

    • 实现方式:由程序员创建或通过工具生成代理类的源码,并编译。
    • 优点:结构简单,易于理解和实现。
    • 缺点:代理类与委托类耦合紧密,添加新的代理类需要重新编写代码。
    • 使用场景:需要明确代理类的情况下。
  • 动态代理

    • 实现方式:在运行时由反射机制动态生成代理类。
    • 优点:减少代码量,代理类的逻辑可以复用,增加灵活性。
    • 缺点:性能开销较大,调试困难。
    • 使用场景:需要灵活生成代理类的情况下。
    • 实现方式:Java 动态代理(通过 java.lang.reflect.Proxy 和 InvocationHandler)、CGLIB 动态代理(通过字节码生成)。

7.简单列举几个Android源码中使用到设计模式的例子

  • 单例模式Context 类中的 getSystemService 方法。
  • 观察者模式BroadcastReceiverContentObserver
  • 策略模式LayoutInflater 中的布局加载策略。
  • 责任链模式View 的事件分发机制。
  • 适配器模式RecyclerView.Adapter
  • 代理模式Binder 机制。
  • 装饰者模式Drawable 类中的 LayerDrawable
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/812541
推荐阅读
相关标签
  

闽ICP备14008679号