日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

结构型模式—外观模式

發(fā)布時(shí)間:2024/4/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 结构型模式—外观模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文作者:Fina1ly

原文地址:java設(shè)計(jì)模式之外觀模式(門面模式)

目錄

一、概念介紹

二、角色及使用場景

三、實(shí)例

四、優(yōu)點(diǎn)

  - 松散耦合

  - 簡單易用

  - 更好的劃分訪問層次


一、概念介紹

  外觀模式(Facade),他隱藏了系統(tǒng)的復(fù)雜性,并向客戶端提供了一個(gè)可以訪問系統(tǒng)的接口。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)性模式。為子系統(tǒng)中的一組接口提供了一個(gè)統(tǒng)一的訪問接口,這個(gè)接口使得子系統(tǒng)更容易被訪問或者使用。?

二、角色及使用場景

簡單來說,該模式就是把一些復(fù)雜的流程封裝成一個(gè)接口供給外部用戶更簡單的使用。這個(gè)模式中,設(shè)計(jì)到3個(gè)角色。

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

  2).子系統(tǒng)角色:實(shí)現(xiàn)了子系統(tǒng)的功能。它對(duì)客戶角色和Facade時(shí)未知的。它內(nèi)部可以有系統(tǒng)內(nèi)的相互交互,也可以由供外界調(diào)用的接口。

  3).客戶角色:通過調(diào)用Facede來完成要實(shí)現(xiàn)的功能。

使用場景:

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

  2- 子系統(tǒng)相互獨(dú)立;

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

三、實(shí)例

  下面,我們就通過一個(gè)簡單的例子來實(shí)現(xiàn)該模式。每個(gè)Computer都有CPU、Memory、Disk。在Computer開啟和關(guān)閉的時(shí)候,相應(yīng)的部件也會(huì)開啟和關(guān)閉,所以,使用了該外觀模式后,會(huì)使用戶和部件之間解耦。如:

包體的創(chuàng)建:

代碼實(shí)現(xiàn)

首先是子系統(tǒng)類:

?【代碼清單--1】

?

1 package com.huawei.facadeDesign.children;2 3 import org.apache.log4j.Logger;4 5 /**6 * cpu子系統(tǒng)類7 * @author Administrator8 *9 */ 10 public class CPU 11 { 12 public static final Logger LOGGER = Logger.getLogger(CPU.class); 13 public void start() 14 { 15 LOGGER.info("cpu is start..."); 16 } 17 18 public void shutDown() 19 { 20 LOGGER.info("CPU is shutDown..."); 21 } 22 }

?

?

?【代碼清單--2】

?

1 package com.huawei.facadeDesign.children;2 3 import org.apache.log4j.Logger;4 5 /**6 * Disk子系統(tǒng)類7 * @author Administrator8 *9 */ 10 public class Disk 11 { 12 public static final Logger LOGGER = Logger.getLogger(Disk.class); 13 public void start() 14 { 15 LOGGER.info("Disk is start..."); 16 } 17 18 public void shutDown() 19 { 20 LOGGER.info("Disk is shutDown..."); 21 } 22 }

?

【代碼清單--3】

?

?

1 package com.huawei.facadeDesign.children;2 3 import org.apache.log4j.Logger;4 5 /**6 * Memory子系統(tǒng)類7 * @author Administrator8 *9 */ 10 public class Memory 11 { 12 public static final Logger LOGGER = Logger.getLogger(Memory.class); 13 public void start() 14 { 15 LOGGER.info("Memory is start..."); 16 } 17 18 public void shutDown() 19 { 20 LOGGER.info("Memory is shutDown..."); 21 } 22 }

然后是,門面類Facade

【代碼清單--4】

?

1 package com.huawei.facadeDesign.facade;2 3 import org.apache.log4j.Logger;4 5 import com.huawei.facadeDesign.children.CPU;6 import com.huawei.facadeDesign.children.Disk;7 import com.huawei.facadeDesign.children.Memory;8 9 10 /** 11 * 門面類(核心) 12 * @author Administrator 13 * 14 */ 15 public class Computer 16 { 17 public static final Logger LOGGER = Logger.getLogger(Computer.class); 18 19 private CPU cpu; 20 private Memory memory; 21 private Disk disk; 22 public Computer() 23 { 24 cpu = new CPU(); 25 memory = new Memory(); 26 disk = new Disk(); 27 } 28 public void start() 29 { 30 LOGGER.info("Computer start begin"); 31 cpu.start(); 32 disk.start(); 33 memory.start(); 34 LOGGER.info("Computer start end"); 35 } 36 37 public void shutDown() 38 { 39 LOGGER.info("Computer shutDown begin"); 40 cpu.shutDown(); 41 disk.shutDown(); 42 memory.shutDown(); 43 LOGGER.info("Computer shutDown end..."); 44 } 45 }

?

?

最后為,客戶角色。

【代碼清單--5】

?

1 package com.huawei.facadeDesign;2 3 import org.apache.log4j.Logger;4 5 import com.huawei.facadeDesign.facade.Computer;6 7 /**8 * 客戶端類9 * @author Administrator 10 * 11 */ 12 public class Cilent { 13 public static final Logger LOGGER = Logger.getLogger(Cilent.class); 14 public static void main(String[] args) 15 { 16 Computer computer = new Computer(); 17 computer.start(); 18 LOGGER.info("================="); 19 computer.shutDown(); 20 } 21 22 }

?

?

 【代碼清單--6】運(yùn)行結(jié)果

  從上面的實(shí)例來看,有了這個(gè)Facade類,也就是Computer類,用戶就不用親自去調(diào)用子系統(tǒng)中的Disk,Memory、CPU類了,不需要知道系統(tǒng)內(nèi)部的實(shí)現(xiàn)細(xì)節(jié),甚至都不用知道系統(tǒng)內(nèi)部的構(gòu)成。客戶端只需要跟Facade交互就可以了。

四、優(yōu)點(diǎn)

  - 松散耦合

  使得客戶端和子系統(tǒng)之間解耦,讓子系統(tǒng)內(nèi)部的模塊功能更容易擴(kuò)展和維護(hù);

  - 簡單易用

  客戶端根本不需要知道子系統(tǒng)內(nèi)部的實(shí)現(xiàn),或者根本不需要知道子系統(tǒng)內(nèi)部的構(gòu)成,它只需要跟Facade類交互即可。

  - 更好的劃分訪問層次

  有些方法是對(duì)系統(tǒng)外的,有些方法是系統(tǒng)內(nèi)部相互交互的使用的。子系統(tǒng)把那些暴露給外部的功能集中到門面中,這樣就可以實(shí)現(xiàn)客戶端的使用,很好的隱藏了子系統(tǒng)內(nèi)部的細(xì)節(jié)。

總結(jié)

以上是生活随笔為你收集整理的结构型模式—外观模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。