最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設(shè)計(jì)模式詳解之門(mén)面模式(外觀模式)

 更新時(shí)間:2016年04月28日 11:50:20   作者:葉德華  
為子系統(tǒng)中的一組接口提供一個(gè)一致的界面, Facade 模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。本文給大家介紹Java設(shè)計(jì)模式詳解之門(mén)面模式(外觀模式),感興趣的朋友參考下吧

門(mén)面模式(Facade Pattern)也叫外觀模式,它隱藏系統(tǒng)的復(fù)雜性,并向客戶端提供一個(gè)可以訪問(wèn)系統(tǒng)的接口。這種類(lèi)型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它向現(xiàn)有的系統(tǒng)添加一個(gè)接口,來(lái)隱藏系統(tǒng)的復(fù)雜性,為子系統(tǒng)中的一組接口提供了一個(gè)統(tǒng)一的高層訪問(wèn)接口,這個(gè)接口使得子系統(tǒng)更容易被訪問(wèn)或使用。這種模式涉及到一個(gè)單一的類(lèi),該類(lèi)提供了客戶端請(qǐng)求的簡(jiǎn)化方法和對(duì)現(xiàn)有系統(tǒng)類(lèi)方法的委托調(diào)用。

簡(jiǎn)而言之,就是把一堆復(fù)雜的流程封裝成一個(gè)接口供給用戶更簡(jiǎn)單的使用,這個(gè)設(shè)計(jì)模式里有三個(gè)角色:

1)門(mén)面角色( facade ):這是門(mén)面模式的核心。它被客戶角色調(diào)用,因此它熟悉子系統(tǒng)的功能。它內(nèi)部根據(jù)客戶角色已有的需求預(yù)定了幾種功能組合。

2)子系統(tǒng)角色(subsystem):實(shí)現(xiàn)了子系統(tǒng)的功能。對(duì)它而言, façade 角色就和客戶角色一樣是未知的,它沒(méi)有任何 façade 角色的信息和鏈接。

3)客戶角色:調(diào)用 façade 角色來(lái)完成要得到的功能。

下面是一個(gè)簡(jiǎn)單的實(shí)現(xiàn)實(shí)例:

// 定義了一個(gè)統(tǒng)一的入口
public class ShapeMaker {
private Shape circle;
private Shape rectangle;
private Shape square;
public ShapeMaker() {
circle = new Circle();
rectangle = new Rectangle();
square = new Square();
}
public void drawCircle() {
circle.draw();
}
public void drawRectangle() {
rectangle.draw();
}
public void drawSquare() {
square.draw();
}
}
// 直接利用之前定義的外觀類(lèi)來(lái)繪制各種形狀,至于怎么獲得、怎么繪制無(wú)需關(guān)注
public class FacadePatternDemo {
public static void main(String[] args) {
ShapeMaker shapeMaker = new ShapeMaker();
shapeMaker.drawCircle();
shapeMaker.drawRectangle();
shapeMaker.drawSquare();
}
}

圖1:UML圖示

class DrawerOne {
public void open() {
System.out.println("第一個(gè)抽屜被打開(kāi)了");
getKey();
}
public void getKey() {
System.out.println("得到第二個(gè)抽屜的鑰匙");
}
}
class DrawerTwo {
public void open() {
System.out.println("第二個(gè)抽屜被打開(kāi)了");
getFile();
}
public void getFile() {
System.out.println("得到這個(gè)重要文件");
}
}
class DrawerFacade {
DrawerOne darwerOne = new DrawerOne();
DrawerTwo darwerTwo = new DrawerTwo();
public void open() {
darwerOne.open();
darwerTwo.open();
}
}
public class DrawerClient {
public static void main(String[] args) {
DrawerFacade drawer = new DrawerFacade();
drawer.open();
}
}

門(mén)面模式使用場(chǎng)景:

(1)為復(fù)雜的模塊或子系統(tǒng)提供外界訪問(wèn)的模塊。

(2)子系統(tǒng)相對(duì)獨(dú)立。

(3)在層次化結(jié)構(gòu)中,可以使用外觀模式定義系統(tǒng)中每一層的入口。

以上所述是小編給大家介紹的Java設(shè)計(jì)模式詳解之門(mén)面模式(外觀模式),希望對(duì)大家有所幫助!

相關(guān)文章

  • springboot中@RestController注解實(shí)現(xiàn)

    springboot中@RestController注解實(shí)現(xiàn)

    在JavaWeb開(kāi)發(fā)中,Spring框架及其組件SpringMVC因高效和強(qiáng)大功能而廣受歡迎,@RestController注解是SpringMVC中的重要組成部分,下面就來(lái)介紹一下,感興趣的可以了解一下
    2024-09-09
  • Mybatis-Plus?動(dòng)態(tài)表名的實(shí)踐

    Mybatis-Plus?動(dòng)態(tài)表名的實(shí)踐

    本文主要介紹了Mybatis-Plus?動(dòng)態(tài)表名的實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • IDEA修改SVN地址的實(shí)現(xiàn)

    IDEA修改SVN地址的實(shí)現(xiàn)

    如果你正在使用SVN進(jìn)行版本控制,并且需要更改你的SVN地址,那么這篇文章將為你提供必要的步驟和指導(dǎo),感興趣的可以了解一下
    2023-12-12
  • 淺談MyBatisPlus中LocalDateTime引發(fā)的一些問(wèn)題和解決辦法

    淺談MyBatisPlus中LocalDateTime引發(fā)的一些問(wèn)題和解決辦法

    MyBatisPlus進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),我們經(jīng)常會(huì)遇到處理日期時(shí)間類(lèi)型的需求,本文主要介紹了淺談MyBatisPlus中LocalDateTime引發(fā)的一些問(wèn)題和解決辦法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • elasticsearch的靈魂唯一master選舉機(jī)制原理分析

    elasticsearch的靈魂唯一master選舉機(jī)制原理分析

    這篇文章主要為大家介紹了elasticsearch的靈魂唯一master選舉機(jī)制原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • 使用Java編寫(xiě)串口程序的流程步驟

    使用Java編寫(xiě)串口程序的流程步驟

    本文將介紹如何使用Java編寫(xiě)串口程序,包括串口的基本概念、Java串口通信API的使用、串口程序的開(kāi)發(fā)流程以及一些常見(jiàn)問(wèn)題的解決方法等,希望通過(guò)本文的介紹,讀者能夠?qū)κ褂肑ava編寫(xiě)串口程序有一個(gè)基本的了解,并能夠?qū)嵺`和應(yīng)用于實(shí)際項(xiàng)目中
    2023-11-11
  • 關(guān)于javaWeb中405錯(cuò)誤的解決方法

    關(guān)于javaWeb中405錯(cuò)誤的解決方法

    下面小編就為大家?guī)?lái)一篇關(guān)于javaWeb中405錯(cuò)誤的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Java 自定義Spring框架與核心功能詳解

    Java 自定義Spring框架與核心功能詳解

    Spring框架是由于軟件開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用的是基本的JavaBean來(lái)完成以前只可能由EJB完成的事情。然而,Spring的用途不僅僅限于服務(wù)器端的開(kāi)發(fā)
    2021-10-10
  • SpringBoot整合Web開(kāi)發(fā)之Json數(shù)據(jù)返回的實(shí)現(xiàn)

    SpringBoot整合Web開(kāi)發(fā)之Json數(shù)據(jù)返回的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot整合Web開(kāi)發(fā)其中Json數(shù)據(jù)返回的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • springboot+mybatis-plus實(shí)現(xiàn)內(nèi)置的CRUD使用詳解

    springboot+mybatis-plus實(shí)現(xiàn)內(nèi)置的CRUD使用詳解

    這篇文章主要介紹了springboot+mybatis-plus實(shí)現(xiàn)內(nèi)置的CRUD使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評(píng)論

锦州市| 洱源县| 中阳县| 泾川县| 萝北县| 青阳县| 安国市| 页游| 黔江区| 龙山县| 鄄城县| 北辰区| 库尔勒市| 樟树市| 正蓝旗| 曲靖市| 进贤县| 白沙| 衡山县| 柯坪县| 武穴市| 大连市| 潜江市| 平定县| 安仁县| 古浪县| 沙河市| 文登市| 赤壁市| 田阳县| 华亭县| 锦屏县| 江津市| 邹城市| 老河口市| 于田县| 长宁县| 乌恰县| 陵川县| 开鲁县| 庆城县|