13個のインタフェースを用いて多形性を実現する(dao実装)


インタフェースと多形性


  • 1つのインタフェースが複数のオブジェクトによって実装される場合、クライアント・プログラムは、このインタフェースの方法を使用して複数のオブジェクトの実装(多形性)を使用することができる.

  • いろいろな例


  • インタフェースを使用してdaoを実装


  • メンバー情報をデータベースに格納するdao(dataaccess object)は、複数のデータベース製品をサポートするために実装される

  • 環境ファイル(db.properties)からデータベースタイプに関する情報を読み出し、これらの情報に基づいてdaoインスタンスを作成して実行します.
  • UserInfo.JAva(ユーザ情報クラス)
    public class UserInfo {
    	
    	private String userId;
    	private String passwd;
    	private String userName;
    	
    	public String getUserId() {
    		return userId;
    	}
    	
    	public void setUserId(String userId) {
    		this.userId = userId;
    	}
    	
    	public String getPasswd() {
    		return passwd;
    	}
    	
    	public void setPasswd(String passwd) {
    		this.passwd = passwd;
    	}
    	
    	public String getUserName() {
    		return userName;
    	}
    	
    	public void setUserName(String userName) {
    		this.userName = userName;
    	}
    }
    UserInfoDao.JAva(daoが提供すべきメソッドを宣言したインタフェース)
    public interface UserInfoDao {
    
    	void insertUserInfo(UserInfo userInfo);
    	void updateUserInfo(UserInfo userInfo);
    	void deleteUserInf(UserInfo userInfo);
    }
    UserInfoMySqlDao.MySqlバージョンのdaoはUserInfoDaoインタフェースを実現
    public class UserInfoMySqlDao implements UserInfoDao{
    
    	@Override
    	public void insertUserInfo(UserInfo userInfo) {
    		System.out.println("insert into MYSQL DB userId =" + userInfo.getUserId() );		
    	}
    
    	@Override
    	public void updateUserInfo(UserInfo userInfo) {
    		System.out.println("update into MYSQL DB userId = " + userInfo.getUserId());		
    	}
    
    	@Override
    	public void deleteUserInf(UserInfo userInfo) {
    		System.out.println("delete from MYSQL DB userId = " + userInfo.getUserId());
    		
    	}
    
    }
    UserInfoOracleDao.Oracleバージョンdao(UserInfoDaoインタフェースを実装)
    public class UserInfoOracleDao implements UserInfoDao{
    
    	public void insertUserInfo(UserInfo userInfo){
    		System.out.println("insert into ORACLE DB userId =" + userInfo.getUserId() );
    	}
    	
    	public void updateUserInfo(UserInfo userInfo){
    		System.out.println("update into ORACLE DB userId = " + userInfo.getUserId());
    	}
    	
    	public void deleteUserInf(UserInfo userInfo){
    		System.out.println("delete from ORACLE DB userId = " + userInfo.getUserId());
    	}
    }
    UserInfoClient.UserInfoDaoインタフェースを利用したクライアントプログラム
    public class UserInfoClient {
    
    	public static void main(String[] args) throws IOException {
    
    		FileInputStream fis = new FileInputStream("db.properties");
    		
    		Properties prop = new Properties();
    		prop.load(fis);
    		
    		String dbType = prop.getProperty("DBTYPE");
    		
    		UserInfo userInfo = new UserInfo();
    		userInfo.setUserId("12345");
    		userInfo.setPasswd("!@#$%");
    		userInfo.setUserName("이순신");
    		
    		
    		UserInfoDao userInfoDao = null;
    		
    		if(dbType.equals("ORACLE")){
    			userInfoDao = new UserInfoOracleDao();
    		}
    		else if(dbType.endsWith("MYSQL")){
    			userInfoDao = new UserInfoMySqlDao();
    		}
    		else{
    			System.out.println("db support error");
    			return;
    		}
    		
    		userInfoDao.insertUserInfo(userInfo);
    		userInfoDao.updateUserInfo(userInfo);
    		userInfoDao.deleteUserInf(userInfo);
    	}
    }
    db.properties環境ファイルがMYSQLの場合
    DBTYPE=MYSQL
    実行結果

    db.properties環境ファイルがORACLEの場合
    DBTYPE=ORACLE
    実行結果