一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java使用組合模式實現表示公司組織結構功能示例

Java使用組合模式實現表示公司組織結構功能示例

2021-05-03 11:29chengqiuming Java教程

這篇文章主要介紹了Java使用組合模式實現表示公司組織結構功能,簡單描述了組合模式的概念、功能并結合實例形式分析了Java使用組合模式實現公司組織結構表示功能具體操作步驟與相關注意事項,需要的朋友可以參考下

本文實例講述了java使用組合模式實現表示公司組織結構功能。分享給大家供大家參考,具體如下:

一、模式定義

組合模式:將對象組合成樹形結構以表示“部分一整體”的層次結構,組合模式使得用戶對單個對象和組合對象的使用具有一致性。

二、組合模式舉例

1 模式分析

我們借用公司組織結構圖來說明這一模式。

經過分析后,我們得出該模式靜態類圖如下:

Java使用組合模式實現表示公司組織結構功能示例

2 代碼示例

2.1 建立員工抽象類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package com.demo.composite;
/**
 * 職工類接口
 *
 * @author
 *
 */
public abstract class staff {
  // 員工號
  protected string no;
  // 職工名字
  protected string name;
  // 職位
  protected string position;
  // 薪資
  protected float salary;
  // 私有屬性 長度字符串
  private int length;
  // 構造方法
  public staff(string no, string name, string position, float salary) {
    this.no = no;
    this.name = name;
    this.position = position;
    this.salary = salary;
    // 計算總字節長度
    this.length += (no == null || "".equals(no.trim())) ? 0
        : no.getbytes().length;
    this.length += (name == null || "".equals(name.trim())) ? 0 : name
        .getbytes().length;
    this.length += (position == null || "".equals(position.trim())) ? 0
        : position.getbytes().length;
    this.length += string.valueof(salary).getbytes().length;
  }
  // 獲得用戶基本信息
  public void printuserbaseinfo() {
    system.out.println("|" + this.no + " " + this.name + " "
        + this.position + " " + this.salary);
  }
  // 添加員工信息
  public abstract void add(staff staff);
  // 刪除員工
  public abstract staff remove(string no);
  // 打印員工信息
  public abstract void printemployeesinfo(int layer);
  // 打印若干字符
  protected void printchar(int layer) {
    for (int j = 0; j < layer * 2; j++) {
      system.out.print("-");
    }
  }
  // 私有方法打印一行
  protected void printline() {
    system.out.print("+");
    for (int i = 0; i < this.length + 4; i++) {
      system.out.print("-");
    }
    system.out.println("-");
  }
  public string getno() {
    return no;
  }
  public void setno(string no) {
    this.no = no;
  }
  public string getname() {
    return name;
  }
  public void setname(string name) {
    this.name = name;
  }
  public string getposition() {
    return position;
  }
  public void setposition(string position) {
    this.position = position;
  }
  public float getsalary() {
    return salary;
  }
  public void setsalary(float salary) {
    this.salary = salary;
  }
}

2.2 創建管理者

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package com.demo.composite.sub;
import java.util.arraylist;
import com.demo.composite.staff;
/**
 * 管理人員(手下有其他員工的人)
 *
 * @author
 *
 */
public class manager extends staff {
  // 存儲手下員工信息
  private final arraylist<staff> arraylist = new arraylist<staff>();
  // 構造方法
  public manager(string no, string name, string position, float salary) {
    super(no, name, position, salary);
  }
  /**
   * 增加一個員工
   */
  @override
  public void add(staff staff) {
    this.arraylist.add(staff);
  }
  /**
   * 刪除員工信息
   */
  @override
  public staff remove(string no) {
    staff staff = null;
    if (no != null && !"".equals(no.trim())) {
      for (int i = 0; i < this.arraylist.size(); i++) {
        if (this.arraylist.get(i) == null) {
          continue;
        }
        if (no.equals(this.arraylist.get(i).getno())) {
          staff = this.arraylist.remove(i);
          break;
        }
      }
    }
    return staff;
  }
  /**
   * 打印員工信息
   */
  @override
  public void printemployeesinfo(int layer) {
    int tmplayer = ++layer;
    for (int i = 0; i < this.arraylist.size(); i++) {
      if (this.arraylist.get(i) == null) {
        continue;
      }
      // 打印'-'
      printchar(tmplayer);
      // 打印員工基本信息
      this.arraylist.get(i).printuserbaseinfo();
      // 打印手下員工信息
      this.arraylist.get(i).printemployeesinfo(tmplayer);
    }
  }
}

2.3 創建普通員工

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.demo.composite.sub;
import com.demo.composite.staff;
/**
 * 普通員工(真正干活的人)
 *
 * @author
 *
 */
public class employees extends staff
{
  // 構造方法
  public employees(string no, string name, string position, float salary)
  {
    super(no, name, position, salary);
  }
  /**
   * 添加員工信息
   */
  @override
  public void add(staff staff)
  {
    return;
  }
  /**
   * 刪除員工信息
   */
  @override
  public staff remove(string no)
  {
    // 直接返回null
    return null;
  }
  /**
   * 打印員工信息
   */
  @override
  public void printemployeesinfo(int layer)
  {
    return;
  }
}

2.4 客戶端測試

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package com.demo;
import com.demo.composite.staff;
import com.demo.composite.sub.employees;
import com.demo.composite.sub.manager;
/**
 * 主應用程序
 *
 * @author
 *
 */
public class client
{
  /**
   * @param args
   */
  public static void main(string[] args)
  {
    // 公司ceo
    staff boss = new manager("1", "大老板", "ceo", 100000);
    /**
     * ceo手下有若干部門經理
     */
    // 財務部經理
    staff financemanager = new manager("11", "張總", "財務部經理", 60000);
    // 人事部經理
    staff personnelmanager = new manager("12", "王總", "人事部經理", 60000);
    // 技術部經理
    staff technicalmanager = new manager("13", "陳總", "技術部經理", 60000);
    /**
     * 技術部門還有助理和若干主管
     */
    // 技術部門助理
    staff deptassistant = new manager("1301", "王助理", "部門助理", 20000);
    // 技術部門主管1
    staff deptmanager1 = new manager("1302", "主管1", "技術主管", 30000);
    /**
     * 技術主管deptmanager1 下面還有軟件工程師(最終干活的人)
     */
    staff softwareengineer1 = new employees("1302001", "張三", "軟件工程師", 5000);
    staff softwareengineer2 = new employees("1302002", "李四", "軟件工程師", 5500);
    staff softwareengineer3 = new employees("1302003", "王五", "軟件工程師", 4500);
    // 為技術主管1添加員工信息
    deptmanager1.add(softwareengineer1);
    deptmanager1.add(softwareengineer2);
    deptmanager1.add(softwareengineer3);
    // 技術部門主管2
    staff deptmanager2 = new manager("1303", "主管2", "技術主管", 30000);
    // 為技術部經理 添加:部門助理、技術主管1和技術主管2
    technicalmanager.add(deptassistant);
    technicalmanager.add(deptmanager1);
    technicalmanager.add(deptmanager2);
    // 市場部經理
    staff marketingmanager = new manager("14", "吳總", "市場部經理", 60000);
    // 為ceo 添加:財務部經理、人事部經理、技術部經理和市場部經理
    boss.add(financemanager);
    boss.add(personnelmanager);
    boss.add(technicalmanager);
    boss.add(marketingmanager);
    // 打印ceo 信息
    boss.printuserbaseinfo();
    // 打印ceo 手下員工信息
    boss.printemployeesinfo(1);
  }
}

運行結果如下:

|1 大老板 ceo 100000.0
----|11 張總 財務部經理 60000.0
----|12 王總 人事部經理 60000.0
----|13 陳總 技術部經理 60000.0
------|1301 王助理 部門助理 20000.0
------|1302 主管1 技術主管 30000.0
--------|1302001 張三 軟件工程師 5000.0
--------|1302002 李四 軟件工程師 5500.0
--------|1302003 王五 軟件工程師 4500.0
------|1303 主管2 技術主管 30000.0
----|14 吳總 市場部經理 60000.0

三、該模式設計原則

1 統一對待個別對象和組合對象
2 面向抽象編程

四、使用場合

1 想表示對象的“部分一整體”層次結構的時候。
2 希望用戶忽略組合對象與單個對象的不同,用戶將統一使用組合結構中所有對象的時候。

組合模式的靜態類圖如下

Java使用組合模式實現表示公司組織結構功能示例

希望本文所述對大家java程序設計有所幫助。

原文鏈接:https://blog.csdn.net/chengqiuming/article/details/70139251

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久国产免费 | 我与旗袍老师疯狂床震 | 肉宠文很肉到处做1v1 | 男人的j放进女人的p全黄 | 青青成人在线 | 男女一级特黄a大片 | 精品国产麻豆AV无码 | 国产91素人搭讪系列天堂 | 成人私人影院www片免费高清 | 九九在线精品亚洲国产 | 国产精品午夜国产小视频 | 久久精品嫩草影院免费看 | 日韩精品中文字幕视频一区 | 亚洲高清在线天堂精品 | 调教女帝| 9久热这里只有精品视频在线观看 | 午夜办公室在线观看高清电影 | 国产自拍视频一区 | 我的年轻漂亮继坶三级 | 成人福利免费在线观看 | 日本videos有奶水的hd | 国产香蕉一区二区在线网站 | 青春草视频在线免费观看 | 公妇仑乱在线观看 | 青青草国产精品 | 楚乔传第二部免费播放电视连续剧 | 欧美在线视频一区在线观看 | 私人影院在线免费观看 | 久久成人a毛片免费观看网站 | 日本草草视频在线观看 | 亚洲 欧美 日韩 国产 视频 | 4455永久在线视频观看 | 我年轻漂亮的继坶2中字在线播放 | 青青青视频免费线看 视频 青青青青青国产免费手机看视频 | 亚洲精品www久久久久久 | 国产成人99久久亚洲综合精品 | 国产精品亚洲综合久久 | 嫩草影院永久入口在线观看 | 红杏劫 | 亚洲国产精品成 | 经典千人斩一区二区视频 |