設計模式:
1. 廣義概念
面向物件設計中,解決特定問題的經典代碼
2. 狹義概念
GOF4人幫定義的23種設計模式:工廠、配接器、裝飾器、門面、代理、模板...
工廠設計模式:
1. 概念:通過工廠類,創建物件
Object ret = BeanFactory.getBean("key")
2. 好處:解耦合
耦合:指定是代碼間的強關聯關系,一方的改變會影響到另一方
問題:不利于代碼維護
簡單:把介面的實作類,硬編碼在程式中
UserService userService = new UserServiceImpl();
簡單的工廠設計:
public class BeanFactory {
private static Properties env = new Properties();//創建properties集合(map形式)
//靜態代碼塊來讀取
static{
try { //涉及io必定有例外
//第一步 獲得IO輸入流
InputStream inputStream = BeanFactory.class.getResourceAsStream("/applicationContext.properties");
//第二步 檔案內容 封裝 Properties集合中 key = userService value = com.baizhixx.UserServiceImpl
env.load(inputStream);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/*
物件的創建方式:
1. 直接呼叫構造方法 創建物件 UserService userService = new UserServiceImpl();
2. 通過反射的形式 創建物件 解耦合
Class clazz = Class.forName("com.baizhiedu.basic.UserServiceImpl");
UserService userService = (UserService)clazz.newInstance();
*/
public static UserService getUserService() {
UserService userService = null;
try {
//com.baizhiedu.basic.UserServiceImpl
Class clazz = Class.forName(env.getProperty("userService"));
userService = (UserService) clazz.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return userService;
}
public static UserDAO getUserDAO(){
UserDAO userDAO = null;
try {
Class clazz = Class.forName(env.getProperty("userDAO"));
userDAO = (UserDAO) clazz.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return userDAO;
}
}
簡單工廠會有大量的代碼冗余,所以可以用通用工廠來解決此問題
通用工廠設計
創建一切想要的物件
public class BeanFactory{
// 修飾符 回傳值型別 方法名 引數表
public static Object getBean(String key){
Object ret = null;
try {
Class clazz = Class.forName(env.getProperty(key));
ret = clazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return ret;
}
}
通用工廠的使用方法
1. 定義型別 (類)
2. 通過組態檔的配置告知工廠(applicationContext.properties)
key = value
3. 通過工廠獲得類的物件
Object ret = BeanFactory.getBean("key")
通用工廠的使用例子
//第一步:person類
public class Person{
}
//第二步:組態檔中
person = com.it.demo1.Person
//第三步,測驗類中
@test
public void test(){
Person person =(Person)BeanFactory.getBean("person");
}
Spring的本質:工廠 ApplicationContext (applicationContext.xml)
Spring為我們設計了更復雜更好用的工廠,上文我們自己設計的工廠是使用properties集合作為組態檔,spring使用xml檔案作為組態檔,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/271969.html
標籤:java
上一篇:JVM結構與記憶體模型
