java什么是工厂模式,java简单工厂模式是什么
大家好,关于java什么是工厂模式很多朋友都还不太明白,今天小编就来为大家分享关于java简单工厂模式是什么的知识,希望对各位有所帮助!
java 工厂类,是什么会事
23种设计模式中最简单的一种,工厂模式,说一个简单工厂吧,在java API中,有一个DataFormat类,你可以找到很多static工厂方法,他们都返回一个自己的实例,也就是返回DataFormat,而DataFormat是一个抽象类,他是不能被实例化的,所以,他返回的实际上是他的子类,例如SimpleDataFormat类,这样做的好处是细节隐藏并且提供扩展性。
在你的问题补充中,关于java网站的好坏,我没有太明白你的意思,提问的更明白,我回答的就更详细。
你可以点击我的百度个人档案,加入的QQ群,我们一起研究java相关内容,祝你好运。
Java的工厂模式有哪一些,分别有什么作用,一般用在哪些地方
我简单的说下,举个例子,当我们的程序结构比较繁杂时,比如有100个类,而类中又有很多方法,这些方法之间都互相有依赖关系,也就是一个方法之间的某段逻辑处理需要用到另一个类中的代码逻辑,这种时候对于整个程序而言是非常不利于开发的(我们需要考虑到很多类、方法之间的耦合问题),那么就有一个概念了,也就是面对接口编程。通俗的说就是把类中的方法封装起来,外部调用的人完全不需要考虑方法是如何实现的,但是这样做也有一个不好的地方,我们的接口是不提供方法实现的,而需要在类中实现接口的方法。那么问题产生了,我们在new接口对象的时候需要明确的知道他的实例类。
想象一下,如果程序在继续庞大,接口非常多,接口实例类非常多,这样又会产生我们之前的问题(我们需要考虑到很多类、方法之间的耦合问题)那么这个时候就产生了一中设计思想,也就是工厂模式,这种模式的核心思想就是管理接口的实例对象,把接口和实例对象之间的关系封装起来处理,外部需要用到某个接口的实例时,由工厂进行分配,而不需要关注具体是哪个实例。
如果你做到比较复杂的程序时你应该就能体会到了。
Java 工厂模式
定义工厂的时候出错,因为工厂是要生产东西的,那么肯定是需要先生成一个实例:public static FruitFactory getInstance(){里面具体实现,自己写},而不是返回Fruit这个类。工厂实例化后,就要开始生产了,那么就定义两个个生产的方法
public Fruit produceOrange(){
return new Orange();
}
public Fruit produceApple(){
return new Apple();
}
public Fruit produce(String className){
Fruit f= null;
if("apple".equals(className)){//判断是否要的是苹果的子类
f= new Apple();
}
if("orange".equals(className)){//判断是否要的是橘子的子类
f= new Orange();
}
return f;
}
__________________________
然后就是具体的实现拉,不过这种简单工厂的实现,会有很多问题就是。
public static void main(String[] args){
FruitFactory.getInstance().produceOrange().eat();
FruitFactory.getInstance().produce("Orange").eat()
}
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什么是工厂模式到此分享完毕,希望能帮助到您。