Java設計模式之享元模式

Java設計模式之享元模式

考慮這樣一個場景,年終公司要求部門領導去做報告,比如說多個領導要求研發部門經理在不同的時間分別去做報告,研發部門經理肯定是在第一次把報告準備好,以後直接拿來用,而不是每次都重新做一份報告。下面看看過程實現。

//新建員工接口
public interface Employee {
    void report();
}

//新建管理者類,並實現接口
public class Manager implements Employee {

    private String department;
    private String reportContent;

    public Manager(String department) {
        this.department = department;
    }

    public void setReportContent(String reportContent) {
        this.reportContent = reportContent;
    }

    @Override
    public void report() {
        System.out.println(reportContent);
    }
}

//新建工廠類
public class EmployeeFactory {
    //用HashMap保存
    private final static Map<String,Employee> EMPLOYEE_MAP=new HashMap<>();
    public static Employee getManager(String department){
        Manager manager= (Manager) EMPLOYEE_MAP.get(department);
        if (manager==null){
            manager=new Manager(department);
            System.out.print("第一次需要創建部門經理:"+department);
            String content=department+"彙報,內容爲......";
            manager.setReportContent(content);
            System.out.print("  第一次需要創建報告:");
            //假如map緩存,下次直接用
            EMPLOYEE_MAP.put(department,manager);
        }
        return manager;
    }
}

//調用
 private static final String departments[]={"研發部門","市場部門","財務部門","行政部門","質檢部門"};
    public static void main(String [] a){
        for (int i=0;i<10;i++){
            String department=departments[(int)(Math.random() * departments.length)];
            Manager manager= (Manager) EmployeeFactory.getManager(department);
            manager.report();
        }
    }

//結果
第一次需要創建部門經理:市場部門  第一次需要創建報告:市場部門彙報,內容爲......
第一次需要創建部門經理:行政部門  第一次需要創建報告:行政部門彙報,內容爲......
行政部門彙報,內容爲......
第一次需要創建部門經理:研發部門  第一次需要創建報告:研發部門彙報,內容爲......
市場部門彙報,內容爲......
第一次需要創建部門經理:財務部門  第一次需要創建報告:財務部門彙報,內容爲......
財務部門彙報,內容爲......
市場部門彙報,內容爲......
行政部門彙報,內容爲......
行政部門彙報,內容爲......

從上面的結果可以看出,只有第一次需要創建部門經理和報告,後面直接從緩存去取。下面看看UML的類圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章