设计模式之工厂模式

何为工厂模式呢?百度上是这样定义的:工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。

简而言之就是:接口产生的全部实例通常用于实现相同接口,接口里定义了全部实例共同拥有的方法,这些方法在不同的实现类中实现的方式不同,从而使程序调用者无须关心方法的具体实现。

接下来,看一个例子来深入了解一下工厂模式!

//交通工具接口定义  
public interface Vehicle {  
    public String state();   //行驶状态
}  


该接口定义了vehicle 规范,规范要求实现该接口的类必须具有以下的方法:显示行驶状态

下面是Vehicle类的一个实现类:Car

//Car类实现Vehicle接口  
public class Car implements Vehicle {  
    public String state(){  
        return "Driving on the highway!";  
    }  
    
} 

下面是Vehicle类的另一个实现类:Train
//Train类实现Vehicle接口  
public class Train implements Vehicle {  
    public String state(){  
        return "Driving on the railway!";  
    }  
    
}  


然后再看Vehicle工厂的代码:

public class VehicleFactory {  
    public Vehicle getVehicle(String v)  
    {  
        if(v.equalsIgnoreCase("car"))  
        {  
            return new Car();  
        }else{  
            return new Train();        
        }  
    }  
}

以上是最简单的工厂模式框架,其主程序如下:

public class FactoryTest {  
    public static void main(String[] args){  
        //创建VehicleFactory实例 ,获得工厂实例   
        VehicleFactory vf = new VehicleFactory();  
        //定义接口Vehicle实例,面向接口编程   
       	Vehicle v = null;  
        //使用工厂获得vehicle实例  
        v = vf.getVehicle("car");  
        //下面调用Vehicle接口方法  
        System.out.println(v.state());    
    //使用工厂获得vehicle实例  
        v = vf.getVehicle("train");  
        //下面调用Vehicle接口方法  
        System.out.println(v.state()); 

    }  
}  
   使用Spring 时,即使没有工厂类PersonFactory ,程序一样可以使用工厂模式, Spring完全可以提供所有工厂模式的功能。即在上面的main方法中改动为:
ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml");  
         //定义接口的实例
         Vehicle v = null;  
         //通过Spring上下文获得Car实例  
         p1 = (Vehicle)ctx.getBean("Car");  

v   使用Spring 时,即使没有工厂类PersonFactory ,程序一样可以使用工厂模式, Spring完全可以提供所有工厂模式的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值