首页编程java编程java面试工厂模式是什么?Java中常用的设计模式有哪些请详细说明一下工厂模式。

java面试工厂模式是什么?Java中常用的设计模式有哪些请详细说明一下工厂模式。

编程之家2023-10-1392次浏览

大家好,java面试工厂模式是什么相信很多的网友都不是很明白,包括Java中常用的设计模式有哪些请详细说明一下工厂模式。也是一样,不过没有关系,接下来就来为大家分享关于java面试工厂模式是什么和Java中常用的设计模式有哪些请详细说明一下工厂模式。的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

java面试工厂模式是什么?Java中常用的设计模式有哪些请详细说明一下工厂模式。

java简单工厂模式是什么

简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

那么简单工厂模式是在什么场景下使用呢,下面就以本人的理解举例说明:

就拿登录功能来说,假如应用系统需要支持多种登录方式如:口令认证、域认证(口令认证通常是去数据库中验证用户,而域认证则是需要到微软的域中验证用户)。那么自然的做法就是建立一个各种登录方式都适用的接口,如下图所示:

java面试工厂模式是什么?Java中常用的设计模式有哪些请详细说明一下工厂模式。

public interface Login{

//登录验证

public boolean verify(String name, String password);

java面试工厂模式是什么?Java中常用的设计模式有哪些请详细说明一下工厂模式。

}

public class DomainLogin implements Login{

@Override

public boolean verify(String name, String password){

// TODO Auto-generated method stub

/**

*业务逻辑

*/

return true;

}

}

public class PasswordLogin implements Login{

@Override

public boolean verify(String name, String password){

// TODO Auto-generated method stub

/**

*业务逻辑

*/

return true;

}

}

我们还需要一个工厂类LoginManager,根据调用者不同的要求,创建出不同的登录对象并返回。而如果碰到不合法的要求,会返回一个Runtime异常。

public class LoginManager{

public static Login factory(String type){

if(type.equals("password")){

return new PasswordLogin();

}else if(type.equals("passcode")){

return new DomainLogin();

}else{

/**

*这里抛出一个自定义异常会更恰当

*/

throw new RuntimeException("没有找到登录类型");

}

}

}

测试类:

public class Test{

public static void main(String[] args){

// TODO Auto-generated method stub

String loginType="password";

String name="name";

String password="password";

Login login= LoginManager.factory(loginType);

boolean bool= login.verify(name, password);

if(bool){

/**

*业务逻辑

*/

} else{

/**

*业务逻辑

*/

}

}

}

简单工厂模式的结构如下图:

我们可以设想一下真实的场景,如果把上面的Test当做一个servlet的话,当客户端发起登录请求——>请求交给服务端的Servlet——>Servlet根据客户端传递的loginType调用工厂类LoginManager的factory()方法——>factory()方法根据参数loginType创建相应的登录验证类(DomainLogin或PasswordLogin)并返回——>登录验证类调用方法verify()验证用户名密码是否正确

假如不使用简单工厂模式则验证登录Servlet代码如下(假设Test为一个Servlet,变量loginType、name、password表示从客户端传递过来的参数):

public class Test{

public static void main(String[] args){

// TODO Auto-generated method stub

String loginType="password";

String name="name";

String password="password";

//处理口令认证

if(loginType.equals("password")){

PasswordLogin passwordLogin= new PasswordLogin();

boolean bool= passwordLogin.verify(name, password);

if(bool){

/**

*业务逻辑

*/

} else{

/**

*业务逻辑

*/

}

}

//处理域认证

else if(loginType.equals("passcode")){

DomainLogin domainLogin= new DomainLogin();

boolean bool= domainLogin.verify(name, password);

if(bool){

/**

*业务逻辑

*/

} else{

/**

*业务逻辑

*/

}

}else{

/**

*业务逻辑

*/

}

}

}

上面的代码会不会很蛋疼啊。。。呵呵

《JAVA与模式》一书中使用java.text.DataFormat类作为简单工厂模式的典型例子叙述。

简单工厂模式的优点

模式的核心是工厂类。这个类含有必要的逻辑判断,可以决定在什么时候创建哪一个登录验证类的实例,而调用者则可以免除直接创建对象的责任。简单工厂模式通过这种做法实现了对责任的分割,当系统引入新的登录方式的时候无需修改调用者。

简单工厂模式的缺点

这个工厂类集中了所以的创建逻辑,当有复杂的多层次等级结构时,所有的业务逻辑都在这个工厂类中实现。什么时候它不能工作了,整个系统都会受到影响。

Java中常用的设计模式有哪些请详细说明一下工厂模式。

1.单例模式(有的书上说叫单态模式其实都一样)

该模式主要目的是使内存中保持1个对象

2.工厂模式

该模式主要功能是统一提供实例对象的引用。看下面的例子:

public class Factory{

public ClassesDao getClassesDao(){

ClassesDao cd= new ClassesDaoImpl();

return cd;

}

}

interface ClassesDao{

public String getClassesName();

}

class ClassesDaoImpl implements ClassesDao{

public String getClassesName(){

System.out.println("A班");

}

}

class test

{

public static void main(String[] args){

Factory f= new Factory();

f.getClassesDao().getClassesName();

}

}

这个是最简单的例子了,就是通过工厂方法通过接口获取对象的引用

3.建造模式

该模式其实就是说,一个对象的组成可能有很多其他的对象一起组成的,比如说,一个对象的实现非常复杂,有很多的属性,而这些属性又是其他对象的引用,可能这些对象的引用又包括很多的对象引用。封装这些复杂性,就可以使用建造模式。

4.门面模式

这个模式个人感觉像是Service层的一个翻版。比如Dao我们定义了很多持久化方法,我们通过Service层将Dao的原子方法组成业务逻辑,再通过方法向上层提供服务。门面模式道理其实是一样的。

5.策略模式

这个模式是将行为的抽象,即当有几个类有相似的方法,将其中通用的部分都提取出来,从而使扩展更容易。

Java的工厂模式有哪一些,分别有什么作用,一般用在哪些地方

我简单的说下,举个例子,当我们的程序结构比较繁杂时,比如有100个类,而类中又有很多方法,这些方法之间都互相有依赖关系,也就是一个方法之间的某段逻辑处理需要用到另一个类中的代码逻辑,这种时候对于整个程序而言是非常不利于开发的(我们需要考虑到很多类、方法之间的耦合问题),那么就有一个概念了,也就是面对接口编程。通俗的说就是把类中的方法封装起来,外部调用的人完全不需要考虑方法是如何实现的,但是这样做也有一个不好的地方,我们的接口是不提供方法实现的,而需要在类中实现接口的方法。那么问题产生了,我们在new接口对象的时候需要明确的知道他的实例类。

想象一下,如果程序在继续庞大,接口非常多,接口实例类非常多,这样又会产生我们之前的问题(我们需要考虑到很多类、方法之间的耦合问题)那么这个时候就产生了一中设计思想,也就是工厂模式,这种模式的核心思想就是管理接口的实例对象,把接口和实例对象之间的关系封装起来处理,外部需要用到某个接口的实例时,由工厂进行分配,而不需要关注具体是哪个实例。

如果你做到比较复杂的程序时你应该就能体会到了。

好了,关于java面试工厂模式是什么和Java中常用的设计模式有哪些请详细说明一下工厂模式。的问题到这里结束啦,希望可以解决您的问题哈!

苦咖啡插曲(苦咖啡插曲赤道和北极)java里f7健什么作用,电脑健盘各健代表什么意思。