在在java中,有23种设计模式,包括简单的工厂、抽象的工厂、单例模式、装饰模式和适配器模式。它们都表示了类别之间的框架关系,即对象的逻辑关系java零基础小白的解释是,设计模式是前人经过大量实践总结的优化对象关系。今天我们来谈谈java的面试题的设计模式常考的知识点有哪些?
1、什么是设计模式?
答:设计模式是一套优秀的代码设计经验的总结,被大多数人重复使用,知道并分类。特定环境下特定问题的处理方法。
2、设计模式的作用是什么?
答:(1)重用设计和代码,重用设计比重用代码更有意义,自动带来代码重用;(2)提高扩展性,大量面向接口编程,预留扩展插槽,新功能或特性容易添加到系统中;(3)通过组合提高灵活性,允许代码修改顺利发生,不影响其他模块;(4)提高开发效率,正确使用设计模式。它可以节省很多时间。
3、写几种熟悉的设计模式,并做一个简单的介绍?
答:工厂设计模式:程序在接口和子类之间增加了一个过渡端,通过这个过渡端可以动态实现共同接口的子类实例对象。
代理设计模式:指代理主题操作真实主题,真实主题执行具体业务操作,代理主题负责其他相关业务的处理。例如,在生活中,客户通过代理访问网络,客户通过网络代理连接网络(具体业务),代理服务器完成其他与互联网相关的操作(相关业务),如用户权限和访问限制。
适配器模式:如果一个类想要实现一个具有多种抽象方法的界面,但它只需要实现界面中的一些方法就可以达到目的,因此此此时需要一个中间过渡类,但这种过渡类不想直接使用,因此最适合将其定义为抽象类,然后让未来的子类直接继承抽象类所需的方法,这种抽象类就是适配器类。
4、列出除Singleton外常用的三种设计模式,并简单描述?
答:工厂模式:工厂模式是java中最常用的设计模式之一。这种设计模式属于创建模式,它提供了创建对象的最佳方式。在工厂模式中,我们不会暴露创建对象的逻辑,并使用一个共同的接口来指向新的对象。
适配器模式:适配器模式是两个不兼容接口之间的桥梁。这种设计模式属于结构模式,结合了两个独立接口的功能。该模式涉及一个负责添加独立或不兼容接口功能的单一类别。
模板模式:在模板模式中,抽象类公开定义了执行其方法的方法/模板。它的子类可以根据需要重写,但调用将以抽象类中定义的方式进行。
5、在简单的工厂模式下编写示例代码?
答:package com.bjsxt; public class SimpleFactory { public static Product createProduct(String pname){ Product product=null; if("p1".equals(pname)){ product = new Product(); }else if("p2".equals(pname)){ product = new Product(); }else if("pn".equals(pname)){ product = new Product(); } return product; } }
基本原理:根据输入的参数(通常是字符串参数),工厂类动态决定创建哪个产品子类(这些产品子类继承同一父类或接口),并以父类形式返回
优点:客户端不负责对象的创建,而是由专门的工厂完成;客户端只负责对象的呼叫,实现了创建和呼叫的分离,降低了客户端代码的难度;
缺点:如果增加和减少产品子类,需要修改简单的工厂类别,违反开关原则;如果产品子类别过多,会导致工厂类别非常大,违反高内聚原则,不利于后期维护。
6、Java企业级开发中常用的设计模式有哪些?
答: 根据分层开发的观点,应用程序可分为表示层、业务逻辑层和持久层,每层都有自己的设计模式。
表示层设计模式:(1)Interceptor Filter:拦截过滤器,提供预处理和后处理方案,可过滤请求和响应;(2)Front Controller:管理内容读取、安全、视图管理、导航等功能通过中央控制器提供请求管理和处理。Struts Strutsprepareandexecuterterter、Spring MVC中的DispatcherServlet都是前端控制器;(3) View Helper:视图帮助器负责将显示逻辑与业务逻辑分开。显示的部分放在视图组件中,业务逻辑代码放在帮助器中,典型的功能是内容读取、验证和适应;(4)Composite View:复合视图。
业务逻辑层设计模式:(1)Business Delegate:业务委托,减少表示层与业务逻辑层之间的耦合;(2)Value Object:值对象,解决层间数据交换的成本问题;(3)Session Façade:会话门面,隐藏业务逻辑组件的细节,集中工作流程;(4)Value Object Assembler:不同的值对象组装灵活;(5) Value List Handler:提供执行查询和处理结果的解决方案,缓存查询结果,提高性能;(6)Service Locator:可以找到、创建和定位服务工厂的服务定位器,包装实现细节,降低复杂性,提供单个控制点,通过缓存提高性能。
持久层设计模式:Data Access Object:数据访问对象,以面向对象的方式完成对数据的增删改查。
7、写一个单例类
答:单例模式的主要功能是保证在Java应用程序中,一个类只有一个例子。以下是两种不同形式的单例:
第一种形式:饿汉单例 package com.bjsxt; public class Singleton { private Singleton(){} private static Singleton instance = new Singleton(); public static Singleton getInstance(){ return instance; } }
第二种形式:懒汉单例 package com.bjsxt; public class Singleton { private static Singleton instance = null; private Singleton() {} public static synchronized Singleton getInstance(){ if (instance==null) instance=newSingleton(); return instance; } }
单例的特点:外部世界无法通过结构器创建对象,必须为外部世界提供静态方法的唯一例子。使用Java在编程服务器端时,仍然有很多机会使用单例模式。服务器上的资源非常宝贵。事实上,对于那些无状态的对象,它们可以是单例或静态的(内存中只有唯一的副本)。如果使用它们spring答:这需要根据你的经验来回答。一般来说,您可以根据注入、工厂模式、装饰模式或观察者模式随意选择您使用过的一种模式。但你必须准备好回答下一个基于你选择的模式的问题。
15、里氏代换的原则是什么?
答:里氏代换原则是面向对象设计的基本原则之一。里氏代换原则说,子类可以出现在任何基类可以出现的地方。LSP是继承和重复使用的基石。只有当衍生物可以替换基本类别,软件单位的功能不受影响时,基本类别才能真正重复使用,衍生物也可以在基本类别的基础上添加新的行为。里氏替代原则是正确的“开-闭”补充原则。实现“开-闭”原则的关键步骤是抽象化。基类与子类的继承关系是抽象化的具体实现,因此里氏替代原则是实现抽象化的具体步骤的标准。
通过学习和使用设计模式,我们可以深刻理解面向对象的设计理念,更好地使用面向对象的语言来解决设计中的许多问题。所以一定要学好java中的23种设计模式应掌握上述15种设计模式的面试问题。更重要的是,在设计模式的指导下,我们将逐步将设计理念融入到未来的实际项目开发中,进一步升华我们的编程理念。这是合格的java程序员应有质量和技能。