工廠模式是指用工廠方法代替new創(chuàng)建對象的模式浊闪,它主要解決new方法創(chuàng)建對象擴展性不高及后期修改對象屬性,代碼修改量大的問題。
它的本質(zhì)就是為了將大量的初始化代碼從構(gòu)造方法中解脫出去,達到一個封裝的效果,減少在構(gòu)造方法中出現(xiàn)的錯誤幾率旬薯,使創(chuàng)建對象更加的便捷、簡單适秩。
另外绊序,同個對象不同的工廠方法,也可以更好的實現(xiàn)對類擴展的功能秽荞。下面以一個例子簡單的說明一下這個模式骤公。
場景:公司Hr要招人,以設(shè)計師和工程師為例扬跋,看Hr如何用工廠模式進行工作阶捆。
1. 由于Hr所招的人員都是為了工作,而這些人又同時要生活钦听,這時候我們就可以定義一個接口洒试,把他們共同的特點包裝起來。
package com.hrsystem;
public interface Employee{
public void work();
public void life();
}
2. 然后定義兩個子對象實現(xiàn)這個接口朴上,這也是我們使用工廠方法具體所要創(chuàng)建的對象垒棋。
package com.hrsystem;
import com.hrsystem.Employee;
public class Designer implements Employee{
public void work(){
System.out.println("招了一個設(shè)計師來工作");
}
public void life(){
System.out.println("設(shè)計師工作結(jié)束下班回家生活");
}
}
package com.hrsystem;
import com.hrsystem.Employee;
public class Engineer implements Employee{
public void work(){
System.out.println("招了一個工程師來工作");
}
public void life(){
System.out.println("工程師工作結(jié)束就下班回家生活");
}
}
3. 創(chuàng)建完了這些具體的對象,我們需要一個工廠方法痪宰,這個方法主要是為了Hr能夠通過它來實現(xiàn)想招什么類型的人就招什么類型的人的功能叼架。這也是工廠模式中最關(guān)鍵的一步。
package com.hrsystem;
import com.hrsystem.Employee;
public class HrSystem{
public static Employee employeePerson(Class c){
Employee employee = null;
try {
employee = (Employee) Class.forName(c.getName()).newInstance();
}catch(InstantiationException e){
System.out.println("必須指定招的人的類型");
}catch(IllegalAccessException e){
System.out.println("人員類型錯誤");
}catch(ClassNotFoundException e){
System.out.println("沒有這種人");
}
return employee;
}
}
4. 當(dāng)我們完成了以上的工作衣撬,我們就可以令Hr去按照他的需求去工作了乖订。
package com.hrsystem;
import com.hrsystem.Employee;
import com.hrsystem.HrSystem;
public class Hr{
public static void main(String[] args){
Employee employee = HrSystem.employeePerson(Designer.class);//在這里Hr想要招什么樣的人,就用此方法創(chuàng)建什么樣的對象
employee.work();
employee.life();
}
}