成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談設(shè)計模式之結(jié)構(gòu)型模式

開發(fā) 前端
淺談設(shè)計模式之結(jié)構(gòu)型模式前言通過學(xué)習(xí)設(shè)計模式,我們知道根據(jù)目的、用途的不同,把設(shè)計模式分為創(chuàng)建型模式、結(jié)構(gòu)型模式、行為型模式。

 

[[329232]]

本文轉(zhuǎn)載自微信公眾號「 泰斗賢若如」,轉(zhuǎn)載本文請聯(lián)系 泰斗賢若如公眾號。

前言

通過學(xué)習(xí)設(shè)計模式,我們知道根據(jù)目的、用途的不同,把設(shè)計模式分為創(chuàng)建型模式、結(jié)構(gòu)型模式、行為型模式。

  • 創(chuàng)建型模式主要用于創(chuàng)建對象;
  • 結(jié)構(gòu)型模式主要用于處理類和對象的組合;
  • 行為型模式主要用于描述類或?qū)ο蟮慕换ヒ约奥氊?zé)分配

本篇,我想對結(jié)構(gòu)型模式進行一番總結(jié)、探討。

認識結(jié)構(gòu)型模式

結(jié)構(gòu)型模式所描述的是如何將類和對象結(jié)合在一起來形成一個更大的結(jié)構(gòu),它描述兩種不同的事物:類和對象,根據(jù)這一點,可分為類結(jié)構(gòu)型和對象結(jié)構(gòu)型模式。類結(jié)構(gòu)型模式關(guān)心類的組合,由多個類可以組合成一個更大的系統(tǒng),在類結(jié)構(gòu)型模式中一般只存在繼承關(guān)系和實現(xiàn)關(guān)系;對象結(jié)構(gòu)型模式關(guān)心類與對象的組合,通過關(guān)聯(lián)關(guān)系使得在一個類中定義另一個類的實例對象,然后通過該對象調(diào)用其方法。根據(jù)“合成復(fù)用原則”,在系統(tǒng)中盡量使用關(guān)聯(lián)關(guān)系來替代繼承關(guān)系,因此大部分結(jié)構(gòu)型模式都是對象結(jié)構(gòu)型模式

結(jié)構(gòu)型模式的實例

  • 適配器模式:將一個類的接口轉(zhuǎn)換成客戶希望的另外一種接口,這樣就能實現(xiàn)已有接口的復(fù)用。適配器主要有類適配器和對象適配器兩種實現(xiàn)方式,通常情況下,推薦優(yōu)先使用對象適配器方式。
  • 橋接模式:將抽象部分與實現(xiàn)部分分離,使它們都可以獨立地變化。它主要用于應(yīng)對多維度變化點問題,通過對象組合的方式,可以極大地減少子類的數(shù)目,同時還能讓不同維度獨立擴展變化。
  • 組合模式:將對象組合成樹形結(jié)構(gòu)以表示“整合-部分”的層次結(jié)構(gòu),從而使得用戶對單個對象和組合對象的使用具有一致性,也就是客戶端能夠透明地?zé)o區(qū)別地操作兩者。
  • 裝飾模式:動態(tài)地給一個對象添加一些額外的職責(zé),就增加功能來說,裝飾模式相比生成子類更為靈活。假若使用多繼承的方式來完成職責(zé)的添加,將會不可避免地造成子類數(shù)目的“爆炸性”增長,此外,因為是靜態(tài)增加的,那也就不可能在運行狀態(tài)時動態(tài)地添加或者刪除額外職責(zé)呢。
  • 外觀模式:為子系統(tǒng)中的一組接口提供一個一致的接口,外觀模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用。這樣原來需要客戶直接與復(fù)雜的子系統(tǒng)打交道、交互,現(xiàn)在這一過程將完全將交由外觀對象來完成,極大地方便了客戶端的調(diào)用。
  • 享元模式:運用共享技術(shù)有效地支持大量細粒度的對象。享元模式關(guān)鍵是將對象的內(nèi)部狀態(tài)和外部狀態(tài)分離,盡可能地對“穩(wěn)定”的內(nèi)部狀態(tài)進行共享,而將會隨運用場景而改變的狀態(tài)通過外部狀態(tài)傳入。
  • 代理模式:為其他對象提供一種代理以控制對這個對象的訪問。主要是在客戶端和目標(biāo)對象間增加一層間接層,通過這個間接層來完成對目標(biāo)對象的種種控制操作,所以也就形成了不同功能類型的代理呢,比如遠程代理、保護代理和虛代理等等。
  • ···

以適配器模式為例,代碼解析

說到適配器,我們最熟悉的莫過于電源適配器了,也就是手機的充電頭。它就是適配器模式的一個應(yīng)用。

大家可以試想一下,如果你有一條連接電腦和手機的 USB 數(shù)據(jù)線,連接電腦的一端從電腦接口處接收 5V 的電壓,連接手機的一端向手機輸出 5V 的電壓,并且它們都工作良好。

我們常用的家用電壓都是 220V,所以 USB 數(shù)據(jù)線不能直接拿來給手機充電,這時候我們有兩種方案:

  • 一、單獨制作手機充電器,接收 220V 家用電壓,輸出 5V 電壓。
  • 二、添加一個適配器,將 220V 家庭電壓轉(zhuǎn)化為類似電腦接口的 5V 電壓,再連接數(shù)據(jù)線給手機充電。

如果你使用過早期的手機,就會知道以前的手機廠商采用的就是第一種方案:早期的手機充電器都是單獨制作的,充電頭和充電線是連在一起的,但現(xiàn)在的手機都采用了電源適配器加數(shù)據(jù)線的方案。

現(xiàn)在我要說的適配器模式,就是將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口,使得原本由于接口不兼容而不能一起工作的那些類能一起工作。

適配的意思是適應(yīng)、匹配。通俗地講,適配器模式適用于有相關(guān)性但不兼容的結(jié)構(gòu),源接口通過一個中間件轉(zhuǎn)換后才可以適用于目標(biāo)接口,這個轉(zhuǎn)換過程就是適配,這個中間件就稱之為適配器。

家用電源和 USB 數(shù)據(jù)線有相關(guān)性:家用電源輸出電壓,USB 數(shù)據(jù)線輸入電壓。但兩個接口無法兼容,因為一個輸出 220V,一個輸入 5V,通過適配器將輸出 220V 轉(zhuǎn)換成輸出 5V 之后才可以一起工作。

接下來,我用程序模擬一下這個過程:

家庭電源提供220V的電壓

HomeBattery類:

  1. class HomeBattery { 
  2.     int supply() { 
  3.         // 家用電源提供一個 220V 的輸出電壓 
  4.         return 220; 
  5.     } 

USB 數(shù)據(jù)線只接收 5V 的充電電壓

USBLine類:

  1. class USBLine { 
  2.     void charge(int volt) { 
  3.         // 如果電壓不是 5V,拋出異常 
  4.         if (volt != 5) throw new IllegalArgumentException("只能接收 5V 電壓"); 
  5.         // 如果電壓是 5V,正常充電 
  6.         System.out.println("正常充電"); 
  7.     } 

先來看看適配之前,用戶如果直接用家庭電源給手機充電:

User類

  1. public class User { 
  2.     @Test 
  3.     public void chargeForPhone() { 
  4.         HomeBattery homeBattery = new HomeBattery(); 
  5.         int homeVolt = homeBattery.supply(); 
  6.         System.out.println("家庭電源提供的電壓是 " + homeVolt + "V"); 
  7.  
  8.         USBLine usbLine = new USBLine(); 
  9.         usbLine.charge(homeVolt); 
  10.     } 

運行結(jié)果如下:

  • 家庭電源提供的電壓是 220V
  • java.lang.IllegalArgumentException: 只能接收 5V 電壓

這時,如果加入電源適配器:

Adapter類

  1. class Adapter { 
  2.     int convert(int homeVolt) { 
  3.         // 適配過程:使用電阻、電容等器件將其降低為輸出 5V 
  4.         int chargeVolt = homeVolt - 215; 
  5.         return chargeVolt; 
  6.     } 

然后,用戶再使用適配器將家庭電源提供的電壓轉(zhuǎn)換為充電電壓:

User類

  1. public class User { 
  2.     @Test 
  3.     public void chargeForPhone() { 
  4.         HomeBattery homeBattery = new HomeBattery(); 
  5.         int homeVolt = homeBattery.supply(); 
  6.         System.out.println("家庭電源提供的電壓是 " + homeVolt + "V"); 
  7.  
  8.         Adapter adapter = new Adapter(); 
  9.         int chargeVolt = adapter.convert(homeVolt); 
  10.         System.out.println("使用適配器將家庭電壓轉(zhuǎn)換成了 " + chargeVolt + "V"); 
  11.  
  12.         USBLine usbLine = new USBLine(); 
  13.         usbLine.charge(chargeVolt); 
  14.     } 

運行結(jié)果如下:

  • 家庭電源提供的電壓是 220V
  • 使用適配器將家庭電壓轉(zhuǎn)換成了 5V
  • 正常充電

這就是適配器模式。在我們?nèi)粘5拈_發(fā)中經(jīng)常會使用到各種各樣的 Adapter,都屬于適配器模式的應(yīng)用。

但適配器模式并不推薦多用。因為未雨綢繆好過亡羊補牢,如果事先能預(yù)防接口不同的問題,不匹配問題就不會發(fā)生,只有遇到源接口無法改變時,才應(yīng)該考慮使用適配器。比如現(xiàn)代的電源插口中很多已經(jīng)增加了專門的充電接口,讓我們不需要再使用適配器轉(zhuǎn)換接口,這又是社會的一個進步。

總結(jié)

 

以上內(nèi)容是我對結(jié)構(gòu)型模式做的一次簡單的總結(jié),讓大家對結(jié)構(gòu)型模式整體上有一些理解和認識,文中我以結(jié)構(gòu)型模式中的適配器模式為例,進行了代碼演示,也能讓大家進一步進行了解結(jié)構(gòu)型模式,程序是一個不斷改進的過程,希望我們學(xué)了設(shè)計模式之后能夠?qū)W以致用,優(yōu)化自己的程序。

 

責(zé)任編輯:武曉燕 來源: 泰斗賢若如
相關(guān)推薦

2020-10-21 14:29:15

原型模式

2021-05-18 08:52:31

Prototype 原型模式設(shè)計模式

2021-10-28 19:09:09

模式原型Java

2015-09-06 11:07:52

C++設(shè)計模式單例模式

2013-11-26 17:00:08

Android設(shè)計模式

2010-04-08 09:27:04

PHP設(shè)計模式結(jié)構(gòu)模式

2024-09-19 08:22:41

2011-07-21 14:33:02

設(shè)計模式

2021-05-11 08:54:59

建造者模式設(shè)計

2020-08-21 07:23:50

工廠模式設(shè)計

2021-06-09 08:53:34

設(shè)計模式策略模式工廠模式

2012-02-29 09:41:14

JavaScript

2015-09-08 13:39:10

JavaScript設(shè)計模式

2021-06-16 08:56:06

模版方法模式設(shè)計模式行為型設(shè)計模式

2012-01-13 15:59:07

2021-12-24 07:50:45

責(zé)任鏈模式設(shè)計

2023-09-04 13:14:00

裝飾器設(shè)計模式

2021-06-29 08:54:23

設(shè)計模式代理模式遠程代理

2009-07-08 09:32:25

Java設(shè)計模式

2009-09-02 16:23:27

C# Singleto
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日本一卡精品视频免费 | 精品欧美一区二区在线观看视频 | 国产极品车模吞精高潮呻吟 | 成人在线中文字幕 | 久久久久久91| 欧美视频免费在线 | 国产美女精品视频 | 玖草资源 | 国产情侣久久 | 日韩一区不卡 | 欧美综合色 | 精品国产一区二区三区日日嗨 | 成人午夜毛片 | 在线免费观看成人 | 久久99久久 | 在线播放中文字幕 | 精品国产一二三区 | 久久久91 | 欧美精品一区二区三区四区 | 青青久草 | 综合国产 | 久久久成人免费一区二区 | 99re热精品视频 | 成人免费在线电影 | 午夜影院在线 | 丝袜久久| 免费视频一区二区 | 国产伦精品一区二区三区精品视频 | 国产成人在线一区二区 | 精产国产伦理一二三区 | 成人av久久| 美女视频一区二区三区 | 天天操天天射综合 | 日本 欧美 国产 | 日韩成人久久 | 久久久精彩视频 | 91久久精品| 国内精品久久久久久久 | 精品三区| 九九精品在线 | 免费一级黄色录像 |