首页编程java编程java 什么是静态工厂方法?java简单工厂模式是什么

java 什么是静态工厂方法?java简单工厂模式是什么

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

其实java 什么是静态工厂方法的问题并不复杂,但是又很多的朋友都不太了解java简单工厂模式是什么,因此呢,今天小编就来为大家分享java 什么是静态工厂方法的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

java 什么是静态工厂方法?java简单工厂模式是什么

java 设计模式(工厂方法)

面向抽象(抽象类或接口)编程。

IWorkFactory studentWorkFactory= new StudentWorkFactory();注意:类型是接口类型,即抽象工厂,抽象工厂生产的是抽象产品,而new的则是具体工厂,是由子类实现的,具体工厂生产具体产品。面向抽象的好处:1.在设计抽象的时候不用管具体的实现,只要定义接口知道它用来干什么就行,这样,我只需要知道抽象接口就能继续下面的开发设计工作了,而不用事先设计具体的实现内容;2.可以扩展多个子类实现抽象接口,更利于系统后期的扩展,而对原系统不造成任何影响,即:开-闭原则。

TeacherWork tt= new TeacherWork();不用说就是面向具体实现类编程,缺点就是扩展性不好,对系统后期维护扩展影响较大。

java 什么是静态工厂方法?java简单工厂模式是什么

举个简单的例子:

假如在系统的A.java中代码中使用了TeacherWork类型对象,是满足了目前软件的需求,但是,如果有一天需求变化了需要一个StudentWork类型对象,该怎么办?只能修改A.java类来满足这样的修改需求。这样就影响了原来系统结构稳定性,需要重新调试和测试,而这带来的维护成本是非常大的,有时可能还会带来系统错误,而影响系统运行。

如果在A.java类中应用Work接口类型就不会存在这种问题,A.java不需要任何修改,只需要修改注入到A中的Work接口的具体实现类即可。

java 什么是静态工厂方法?java简单工厂模式是什么

面向抽象编程的好处就在于对系统维护和扩展上,即在不影响原系统稳定运行的基础上增加新的扩展行为,即要符合“开-闭”原则。可能会因此而失去一定的效率问题,但是对于后期的维护成本来说,这个可以忽略不计。推荐你一本好书:《软件秘笈-设计模式那点事》其中讲解的设计模式很到位,还有每个模式的静态类图和JDK中设计模式的具体分析讲解,读了收获一定很大。祝你成功!

java简单工厂模式是什么

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

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

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

public interface Login{

//登录验证

public boolean verify(String name, String password);

}

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中DAOFactory类的作用

java中DAOFactory是一种专门生产DAO的工厂模式。

作用是:

1透明化:

商业对象可以在完全不知道数据源如何具体实现的情况下来使用数据源.访问数据源是透明的,因为实现细节已经被隐藏进了DAO.

2迁移简单化:

DAO层的出现,使得应用程序向不同的数据库实现进行迁移变的容易.商业对象可以对底层数据实现一无所知.这样,迁移只涉及到了对DAO层的修改.另外,如果使用工厂策略,则使为每一种底层数据实现提供一个具体的工厂实现成为可能.在这种情况下,迁移到一种不同的数据实现,其实就相当于为这个应用程序再提供一个新的工厂实现.

3减少在商业对象中的编程难度.

由于DAO管理着所有的数据访问细节,因而大大简化了在商业对象和其他使用DAO的数据客户端里的代码.所有的实现细节相关的代码比如(SQL语句)都包含在DAO而不在商业对象中.这样使得代码变的更加健壮而且大大提高了开发效率.

4将所有的数据访问都单独集中到一层中去.

因为所有的数据访问操作现在都已经被DAO所代理,所以这个单独的数据访问层可以被看作可以是将数据访问实现和其余应用程序相互隔离的一层.这样的集中,使得应用程序可以更加容易的来维护和管理.

缺点:

5对容器管理持久化无用

由于EJB容器使用CMP(容器管理持久化)来管理实体BEAN.容器会自动的为持久化储存访问提供服务.应用程序使用容器管理的实体BEAN则不需要 DAO层的参与.因为应用程序服务器本身就可以透明的提供这些功能.然而,DAO在组合式CMP和BMP需要的场合下还是有用的.

6增加了多余的层.

由于DAO在数据客户端和数据源之外多创建了一层对象,因而,需要对他进行设计和实现,来均衡这个设计模式的利弊.但是,一般来说,采用此设计模式还是利大于弊的.

7需要对类的相互继承关系进行设计.

当使用工厂策略的时候,具体工厂类的继承关系和由这些工厂类生成的产品需要进行设计和实现.我们需要仔细考虑这些多付出的工作是否真的可以产生出来更高的灵活性.使用这个策略会使设计变的更加复杂,然而,你可以先从工厂方法模式开始来实现这个策略,然后在需要的情况下再转向抽象工厂。

文章到此结束,如果本次分享的java 什么是静态工厂方法和java简单工厂模式是什么的问题解决了您的问题,那么我们由衷的感到高兴!

关于java容器描述正确的是什么,java中容器是什么意思简报的格式(简报的格式字体大小)