vjame

优化代码是无止境的
随笔 - 65, 文章 - 9, 评论 - 26, 引用 - 0
数据加载中……

工厂方法模式

工厂方法模式
工厂方法模式和简单工厂模式在结构上的不同是很明显的。工厂方法模式的核心是一个抽象工厂类,而简单工厂模式把

核心放在一个具体类上。工厂方法模式可以允许很多具体工厂类从抽象工厂类中将创建行为继承下来,从而可以成为多个简单工厂模式的综合,进而推广了简单工厂模式。

此模式涉及到抽象工厂角色(汽车厂),具体工厂角色(具体的汽车车间),抽象产品角色(汽车)以及具体产品角色(私车,公交巴士)。


package com.strongit.factory;


//抽象汽车
interface Car{
    
public void run();
    
public void stop();
}

//奔驰汽车
class Benz implements Car{
    
public void run() {
        System.out.println(
"BMW run ");
    }

    
public void stop() {
        System.out.println(
"BMW stop  ");
    }
}

//福特汽车
class Ford implements Car{

    
public void run() {
        System.out.println(
"Ford run ");
    }
    
public void stop() {
        System.out.println(
"Ford stop ");
    }
    
}

//公交巴士
class Bus implements Car{

    
public void run() {

        System.out.println(
"Bus run ");
    }

    
public void stop() {
        
// TODO Auto-generated method stub
        System.out.println("Bus stop ");
    }
    
}

//迷你巴士
class MinBus implements Car{

    
public void run() {

        System.out.println(
"MinBus run ");
    }

    
public void stop() {

        System.out.println(
"MinBus stop ");
    }
    
}

//抽象工厂 
interface Abstractfactory{

}

//汽车工厂
class CarFactory implements Abstractfactory{
    
public Car getCar(String type){
        Car c
=null;
        
try {
            c
=(Car)Class.forName("com.strongit.factory."+type).newInstance();
        } 
catch (InstantiationException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        } 
catch (IllegalAccessException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        } 
catch (ClassNotFoundException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }
        
return c;
    }
}

//巴士工厂
class BusFactory implements Abstractfactory{
    
public Car getBus(String type){
        Car c
=null;
        
try {
            
//java反射机制
            c=(Car)Class.forName("com.strongit.factory."+type).newInstance();
        } 
catch (InstantiationException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        } 
catch (IllegalAccessException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        } 
catch (ClassNotFoundException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }
        
return c;
    }
}

//客服端调用
public class FactoryDemo {

    
public static void main(String[] args) {
        
//CarFactory cf=new CarFactory();
        BusFactory bf=new BusFactory();
        Car c
=null;
        
//c=cf.getCar("Benz");
        c=bf.getBus("MinBus");
        c.run();
        c.stop();
    }

}

/** 运行结果:
MinBus run 
MinBus stop 
 
*/


posted on 2008-10-31 18:23 lanjh 阅读(248) 评论(0)  编辑  收藏 所属分类: 设计模式


只有注册用户登录后才能发表评论。


网站导航: