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

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

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java設計模式之外觀模式學習筆記

java設計模式之外觀模式學習筆記

2020-06-24 11:16翡青 JAVA教程

這篇文章主要為大家詳細介紹了java設計模式之外觀模式學習筆記,具有一定的參考價值,感興趣的小伙伴們可以參考一下

外觀模式: 又稱門面模式: 外觀Facade為子系統的一組接口提供一個一致界面,使得這組子系統易于使用(通過引入一個新的外觀角色降低原系統復雜度,同時降低客戶類與子系統的耦合度).

java設計模式之外觀模式學習筆記

圖片來源: 設計模式: 可復用面向對象軟件的基礎.

實現

案例需求: 租房

有過自己找房租房經歷的同學能夠體會得到找房是件很痛苦的事, 不光要挨個小區跑而且還要跟(二)房東討價還價. 于是后來學聰明了, 不再自己挨門挨戶的磨嘴皮子, 而是直接找像鏈家、我愛我家這樣的房屋中介, 他們手上握有一定的房源, 我們只需付給他們一筆傭金, 他們便可以代我們跟房東講價, 而且他們大都很專業, 省時間又省錢. 此時房屋中介就是一個外觀Facade, 而房屋的出租戶就是子系統SubSystem:

java設計模式之外觀模式學習筆記

Facade 
 外觀類: 知道哪些子系統負責處理請求, 將客戶的請求代理給適當的子系統對象:

java" id="highlighter_375518">
?
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
public class MediumFacade {
 
  private CuiYuanApartment cuiyuan;
 
  private XiXiApartment xixi;
 
  private XiHuApartment xihu;
 
  public MediumFacade() {
    cuiyuan = new CuiYuanApartment("翠苑小區", 900, 1);
    xixi = new XiXiApartment("西溪花園", 1200, 1);
    xihu = new XiHuApartment("西湖小區", 2600, 1);
  }
 
  public void rentingHouse(double price) {
    // 價錢合適而且有房可組
    if (price >= cuiyuan.getPrice() && cuiyuan.getStatus() != 0) {
      System.out.println("預訂" + cuiyuan.getLocation());
      cuiyuan.setStatus(0);
    } else if (price >= xixi.getPrice() && xixi.getStatus() != 0) {
      System.out.println("預訂" + xixi.getLocation());
      xixi.setStatus(0);
    } else if (price >= xihu.getPrice() && xihu.getStatus() != 0) {
      System.out.println("預訂" + xihu.getLocation());
      xihu.setStatus(0);
    } else {
      System.out.println("出價太低/沒有房源 ...");
    }
  }
}

SubSystem 
 子系統集合: 實現子系統功能, 處理Facade對象指派的任務(注意子系統內沒有任何Facade信息,即沒有任何Facade對象引用):

?
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
84
85
86
87
88
89
90
91
92
93
94
95
/**
 * @author jifang
 * @since 16/8/23 上午10:12.
 */
public class XiHuApartment {
 
  private String location;
 
  private double price;
 
  private int status;
 
  public XiHuApartment(String location, double price, int status) {
    this.location = location;
    this.price = price;
    this.status = status;
  }
 
  public String getLocation() {
    return location;
  }
 
  public double getPrice() {
    return price;
  }
 
  public int getStatus() {
    return status;
  }
 
  public void setStatus(int status) {
    this.status = status;
  }
}
 
class XiXiApartment {
  private String location;
 
  private double price;
 
  private int status;
 
  public XiXiApartment(String location, double price, int status) {
    this.location = location;
    this.price = price;
    this.status = status;
  }
 
  public String getLocation() {
    return location;
  }
 
  public double getPrice() {
    return price;
  }
 
  public int getStatus() {
    return status;
  }
 
  public void setStatus(int status) {
    this.status = status;
  }
}
 
class CuiYuanApartment {
 
  private String location;
 
  private double price;
 
  private int status;
 
  public CuiYuanApartment(String location, double price, int status) {
    this.location = location;
    this.price = price;
    this.status = status;
  }
 
  public String getLocation() {
    return location;
  }
 
  public double getPrice() {
    return price;
  }
 
  public int getStatus() {
    return status;
  }
 
  public void setStatus(int status) {
    this.status = status;
  }
}

Client
這樣, Client只需跟一個房屋中介聯系并給出我們的報價, 他們便會幫我們聯系所有符合的房東:

?
1
2
3
4
5
6
7
8
public class Client {
 
  @Test
  public void client() {
    MediumFacade facade = new MediumFacade();
    facade.rentingHouse(800);
  }
}

小結

有過面向對象開發經驗的同學 即使沒有聽說過外觀模式, 也完全有可能使用過他, 因為他完美的體現了依賴倒轉原則和迪米特法則的思想, 是非常常用的模式之一.

使用 

java設計模式之外觀模式學習筆記

首先 在設計初期, 應該有意識的進行層次分離, 比如經典的三層架構, 層與層之間建立Facade, 這樣可以為復雜的子系統提供一個簡單的接口, 使耦合度大大降低.

其次 在開發階段, 子系統往往因為不斷的重構而變得越來越復雜, 增加Facade可以提供一個簡單的接口, 減少模塊間依賴.

第三 在維護一個遺留系統時, 可能這個系統已經非常難以維護和擴展了, 但因為它包含非常重要的功能, 新的需求必須依賴它, 此時可以為新系統開發一個Facade, 為設計粗糙或高復雜度的遺留代碼提供一個的比較清晰簡單的接口, 讓新系統與Facade交互, 而Facade與遺留代碼交互所有繁雜的工作.

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
  • JAVA教程淺談javaSE 面向對象(Object類toString)

    淺談javaSE 面向對象(Object類toString)

    下面小編就為大家帶來一篇淺談javaSE 面向對象(Object類toString)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    jingxian3962020-05-13
  • JAVA教程java代理模式與動態代理模式詳解

    java代理模式與動態代理模式詳解

    代理就是一個人或者一個機構代表另一個人或者另一個機構采取行動。在一些情況下,一個客戶不想或者不能夠直接引用一個對象,而代理對象可以在客戶...

    java技術網1592019-11-06
  • JAVA教程JavaMe開發繪制文本框TextEdit

    JavaMe開發繪制文本框TextEdit

    在JavaMe連載(3)-也說MVC設計模式 一文中提到了一個TextEdit類,但沒有給出具體實現,TextEdit是采用GameCanvas繪制的文本編輯器。本文結合實例給出實現的方法。...

    lijiao2152020-01-06
  • JAVA教程java制作仿微信錄制小視頻控件

    java制作仿微信錄制小視頻控件

    這篇文章主要介紹了java制作仿微信錄制小視頻控件的代碼,錄制小視頻非常方便,有需要的小伙伴可以參考下。 ...

    hebedich2732019-12-15
  • JAVA教程Java中Set與List的關系與區別介紹

    Java中Set與List的關系與區別介紹

    這篇文章主要介紹了Java中Set與List的關系與區別介紹,本文總結它們兩個接口都是繼承自Collection、它們之間的存儲方式不一樣,需要的朋友可以參考下 ...

    junjie2222019-12-12
  • JAVA教程常用的java日期比較和日期計算方法小結

    常用的java日期比較和日期計算方法小結

    這篇文章主要為大家詳細總結了常用的java日期比較和日期計算方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    高山_流水3692020-06-16
  • JAVA教程Spring中的事務管理實例詳解

    Spring中的事務管理實例詳解

    這篇文章主要介紹了Spring中的事務管理,以實例形式詳細分析了事務的概念與特性以及事物管理的具體用法,需要的朋友可以參考下 ...

    shichen20142162019-12-04
  • JAVA教程深入談談java的枚舉(enum)類型

    深入談談java的枚舉(enum)類型

    這篇文章介紹的是java中的枚舉類型,對于枚舉類型的相關知識,我們也介紹過不少方面的內容。希望本文能夠給你帶來幫助,下面來一起看看,有需要的可...

    daisy1382020-06-10
主站蜘蛛池模板: 亚洲免费二区 | 免费视频专区一国产盗摄 | 欧美性一级交视频 | 91制片厂制作传媒网站破解 | 色综合视频在线 | 四虎在线播放 | 97青草香蕉依人在线播放 | 男女爆操 | 亚色九九九全国免费视频 | 冰漪丰满大乳人体图片欣赏 | 久久热r在线视频精品 | 免费看黄色大片 | 变态 另类 国产 亚洲 | 激情亚洲天堂 | 亚洲国产午夜 | 99热久热这里只精品 | 欧美人做人爱a全程免费 | 亚洲羞羞视频 | 国产精品一区二区三区免费 | 亚洲欧美日韩国产精品影院 | 俄罗斯美女破苞 | 毛片在线免费视频 | 青青青手机视频在线观看 | 亚洲阿v天堂在线2017 | 色就色欧美综合偷拍区a | 亚洲欧洲日产国码无码av | 亚洲男人第一天堂 | 日韩有码| 97国产蝌蚪视频在线观看 | 超级碰碰青草免费视频92 | 国产精品欧美亚洲韩国日本 | 国产成人啪精品午夜在线观看 | 成人免费国产欧美日韩你懂的 | 亚洲精品成人456在线播放 | 男人猛进猛出女人下面视频 | 亚洲mm色国产网站 | 草草草在线 | 三上悠亚久久国产 | 美女在线看永久免费网址 | 国产伦码精品一区二区三区 | 91麻豆影视 |