代码改变世界

factory 工厂设计模式

2013-03-22 17:41  功夫猫  阅读(284)  评论(0)    收藏  举报

1.一个简单的工厂设计模式:数据库连接的转换;工具类:Proputil.java

package com.kebin.util;

import java.io.IOException;
import java.util.Properties;

public class Proputil {

    public static Properties getProp(String fileName) {
        Properties prop = new Properties();
        try {
            //拿工具类本身的字节码,与daoConfig.properties建立连通;
            prop.load(Proputil.class.getResourceAsStream(fileName));
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return prop;
    }
}

2.封装类:facatory.java

package com.kebin.factory;
import com.kebin.dao.UserDao;


public class UserDaoFactory {
    public static UserDao getInstance(String className) {
        UserDao userDao = null;
        try {
            userDao = (UserDao)Class.forName(className).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 userDao;
    }
}

3.UserServiceImpl.java

1.调用封装的方法,加载filename得到prop。

  Properties prop = Proputil.getProp("./daoConfig.properties");

2。从加载的prop内,调用getProperty()。得到className。key=value

  String className = prop.getProperty("userDao");

3.调用工厂UserDaoFactory中方法。创建得到userDao。

  userDao = UserDaoFactory.getInstance(className);

package com.kebin.service.impl;

import java.util.Properties;

import com.kebin.dao.UserDao;
import com.kebin.factory.UserDaoFactory;
import com.kebin.service.UserService;
import com.kebin.util.Proputil;

public class UserServiceImpl implements UserService {
    private static UserDao userDao = null;
    static {
        //调用封装的方法,加载filename得到prop。
        Properties prop = Proputil.getProp("./daoConfig.properties");
        //从加载的prop内,调用getProperty()。得到className。key=value
        String className = prop.getProperty("userDao");
        //调用工厂UserDaoFactory中方法。创建得到userDao。
        userDao = UserDaoFactory.getInstance(className);
    }
    
    
    private  UserServiceImpl(){}
    private static UserServiceImpl userService = new UserServiceImpl();
    public static UserServiceImpl getInstance() {
        return userService;
    }    
        
    public void login(String name, String password) {
        userDao.login(name, password);

    }

}

4.daoConfig.properties

userDao =com.kebin.dao.impl.UserDao4MySqlImpl
!userDao=com.kebin.dao.impl.UserDao4OracleImpl 

5.其他的相关类

User
package com.kebin.pojo;

public class User {
    private int id;
    private String name;
    private String password;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    
}
UserDao
package com.kebin.dao;

public interface UserDao {
    public void login(String name,String password);
}
UserDao4MysqlImpl
package com.kebin.dao.impl;

import com.kebin.dao.UserDao;

public class UserDao4MySqlImpl implements UserDao {

    public void login(String name, String password) {
        System.out.println("-------------mysql---------------");
    }

}
UserDao4OracleImpl
package com.kebin.dao.impl;

import com.kebin.dao.UserDao;

public class UserDao4OracleImpl implements UserDao {

    public void login(String name, String password) {
        System.out.println("--------------Oracle---------------");

    }

}
UserService
package com.kebin.service;

public interface UserService {
    public void login(String name,String password);
}

然后写个测试类测试下就OK了。

test
import com.kebin.service.impl.UserServiceImpl;

public class test {

    public static void main(String[] args) {
        UserServiceImpl.getInstance().login("", "");

    }

}

这里面写了监听。简单的配置下就好。