java工厂设计模式详解(java工厂类设计模式)

《大数据和人工智能交流》向广大初学者新增C 、Java 、Python 、Scala、javascript 等目前流行的计算机、大数据编程语言,希望大家以后关注本更多的内容。

 

我们说对象的产生是一个耗时和占用空间的过程,可以想象专门生产对象的工厂,这时候我们用到工厂设计模式。

1、简单的工厂

比如生产车的工厂,其接口如下:

public interface ICar {

public void run();

}

我们分别有Benz车和Ford车,代码如下:

public class Benz implements ICar {

public void run(){

System.out.println("Benz开始启动了。。。。。");

}

}

public class Ford implements ICar {

public void run(){

System.out.println("Ford开始启动了。。。。。");

}

}

那么生产车的工厂为:

public class CarFactory {

public static ICar getFordInstance()

{

return new Ford();

}

public static ICar getBenzInstance()

{

return new Benz();

}

}

其应用如下:

public class FactoryDemo01 {

public static void main(String[] args) {

ICar c1=CarFactory.getBenzInstance();

c1.run();

ICar c2=CarFactory.getFordInstance();

c2.run();

}

}

很显然,每生产个新车CarFactory必须新增加个方法

2、工厂方法

上述代码将工厂方法改进后如下:

public class CarFactory {

public static ICar getCarInstance(String type){

ICar c=null;

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

c=new Benz();

}

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

c=new Ford();

}

return c;

}

}

public class FactoryDemo02 {

public static void main(String[] args) {

ICar c=CarFactory.getCarInstance("Benz");

if(c!=null){

c.run();

}else{

System.out.println("造不了这种汽车。。。");

}

}

}

这样的话只有一个获取实例的方法,而不必每新增个车的对象就增加个方法,但是每新增个车的对象必须新增个“ if”

3、使用反射定制实例

使用Java的反射机制,改进后的工厂类如下:

package sample3;

import com.ICar;

public class CarFactory {

public static ICar getCarInstance(String type){

ICar c=null;

try {

//利用反射得到汽车类型

c=(ICar)Class.forName("sample3."+type).newInstance(); } catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return c;

}

}

对比三个实例:

实例一,虽然实现了简单工厂,但每次只能得到一种汽车,如果我们想换一种,就得修改工厂,太不方便

而实例二则改变了这种情况,便得我们可以按照我们的需要更换汽车,但我们所更换的汽车必须是实现类中有的,如果我们想要增加一种汽车的时候,我们还是得更改工厂

实例三利用反射机制,得到汽车类型,这样当我们需要增加一种新的汽车时,就无需要再修改工厂,而只需要增加要实现的类即可。也就是说要增加什么样的汽车直接增加这个汽车的类即可,而无需改变工厂。从而达到了工厂分离的效果

《大数据和人工智能交流》的宗旨

1、将大数据和人工智能的专业数学:概率数理统计、线性代数、决策论、优化论、博弈论等数学模型变得通俗易懂。

2、将大数据和人工智能的专业涉及到的数据结构和算法:分类、聚类 、回归算法、概率等算法变得通俗易懂。

3、最新的高科技动态:数据采集方面的智能传感器技术;医疗大数据智能决策分析;物联网智慧城市等等。

根据初学者需要会有C语言、Java语言、Python语言、Scala函数式等目前主流计算机语言。

根据读者的需要有和人工智能相关的计算机科学与技术、电子技术、芯片技术等基础学科通俗易懂的文章。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论