Java設(shè)計(jì)模式之五工廠模式

工廠模式是指用工廠方法代替new創(chuàng)建對(duì)象的模式,它主要解決new方法創(chuàng)建對(duì)象擴(kuò)展性不高及后期修改對(duì)象屬性,代碼修改量大的問題。
它的本質(zhì)就是為了將大量的初始化代碼從構(gòu)造方法中解脫出去,達(dá)到一個(gè)封裝的效果,減少在構(gòu)造方法中出現(xiàn)的錯(cuò)誤幾率,使創(chuàng)建對(duì)象更加的便捷、簡(jiǎn)單。
另外,同個(gè)對(duì)象不同的工廠方法,也可以更好的實(shí)現(xiàn)對(duì)類擴(kuò)展的功能。下面以一個(gè)例子簡(jiǎn)單的說明一下這個(gè)模式。

場(chǎng)景:公司Hr要招人,以設(shè)計(jì)師和工程師為例,看Hr如何用工廠模式進(jìn)行工作。
1. 由于Hr所招的人員都是為了工作,而這些人又同時(shí)要生活,這時(shí)候我們就可以定義一個(gè)接口,把他們共同的特點(diǎn)包裝起來(lái)。
package com.hrsystem;

public interface Employee{
    public void work();
    public void life();
}
2. 然后定義兩個(gè)子對(duì)象實(shí)現(xiàn)這個(gè)接口,這也是我們使用工廠方法具體所要?jiǎng)?chuàng)建的對(duì)象。
package com.hrsystem;

import com.hrsystem.Employee;

public class Designer implements Employee{
        public void work(){
            System.out.println("招了一個(gè)設(shè)計(jì)師來(lái)工作");
        }

        public void life(){
            System.out.println("設(shè)計(jì)師工作結(jié)束下班回家生活");
        }
}

package com.hrsystem;

import com.hrsystem.Employee;

public class Engineer implements Employee{
        public void work(){
            System.out.println("招了一個(gè)工程師來(lái)工作");
        }
        
        public void life(){
            System.out.println("工程師工作結(jié)束就下班回家生活");
        }
    }

3. 創(chuàng)建完了這些具體的對(duì)象,我們需要一個(gè)工廠方法,這個(gè)方法主要是為了Hr能夠通過它來(lái)實(shí)現(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("人員類型錯(cuò)誤");
        }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)建什么樣的對(duì)象
        employee.work();
        employee.life();
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容