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

Java適配器模式應(yīng)用之電源適配器功能詳解

 更新時間:2018年05月16日 10:19:52   作者:chengqiuming  
這篇文章主要介紹了Java適配器模式應(yīng)用之電源適配器功能,較為詳細(xì)的分析了適配器模式的概念、原理及Java基于適配器模式實現(xiàn)電源適配器功能的相關(guān)操作技巧與注意事項,需要的朋友可以參考下

本文實例講述了Java適配器模式應(yīng)用之電源適配器功能。分享給大家供大家參考,具體如下:

一、模式定義

存在兩種適配器模式

1 對象適配器模式,在這種適配器模式中,適配器容納一個它包裹的類對象的物理實體。

2 類適配器模式,在這種適配器模式中,適配器繼承自已實現(xiàn)的類。

二、模式舉例

1 模式分析

我們借用筆計本電源適配器來說明這一模式。

已經(jīng)存在的交流電源
筆記本電腦
電源適配器

2 適配器模式的靜態(tài)建模

3 代碼舉例

3.1 抽象電源建立

package com.demo.power;
/**
 * 電源基類
 *
 * @author
 *
 */
public abstract class AbsBasePower
{
  // 電壓值
  private float power;
  // 單位
  private String unit = "V";
  // 構(gòu)造方法
  public AbsBasePower(float power)
  {
    this.power = power;
  }
  public float getPower()
  {
    return power;
  }
  public void setPower(float power)
  {
    this.power = power;
  }
  public String getUnit()
  {
    return unit;
  }
  public void setUnit(String unit)
  {
    this.unit = unit;
  }
}

3.2 220v電源接口

package com.demo.power.v220;
/**
 * 220V 電源接口
 *
 * @author
 *
 */
public interface IPower220 {
  // 220V交流電源打印
  public void output220v();
}

3.3 220v電源實現(xiàn)類

package com.demo.power.v220;
import com.demo.power.AbsBasePower;
/**
 * 220V電源
 *
 * @author
 *
 */
public class Power220 extends AbsBasePower implements IPower220
{
  // 構(gòu)造方法
  public Power220()
  {
    super(220);
  }
  // 220V電源輸出
  public void output220v()
  {
    System.out.println("----這是[" + this.getPower() + this.getUnit() + "]電源!...");
  }
}

3.4 12v電源接口

package com.demo.power.v12;
/**
 * 12V 電源接口
 *
 * @author
 *
 */
public interface IPower12 {
  // 12V電源打印
  public void output12v();
}

3.5 12v電源實現(xiàn)類

package com.demo.power.v12;
import com.demo.power.AbsBasePower;
/**
 * 正常的12V電源
 *
 * @author
 *
 */
public class Power12 extends AbsBasePower implements IPower12 {
  // 12V電源構(gòu)造方法
  public Power12() {
    super(12);
  }
  // 12V電源輸出
  public void output12v() {
    System.out.println("----這是[" + this.getPower() + this.getUnit()
        + "]電源!...");
  }
}

3.6  12v電源對象適配器

package com.demo.adapter;
import com.demo.power.AbsBasePower;
import com.demo.power.v12.IPower12;
/**
 * 電源適配器 (實現(xiàn)目標(biāo)對象接口 即:12V電源接口)
 *
 * @author
 *
 */
public class AdapterPower12 implements IPower12 {
  // 待轉(zhuǎn)換的對象
  private final AbsBasePower absBasePower;
  // 適配器構(gòu)造方法 將待轉(zhuǎn)換對象傳入
  public AdapterPower12(AbsBasePower absBasePower) {
    this.absBasePower = absBasePower;
  }
  // 實現(xiàn)目標(biāo)對象方法
  public void output12v() {
    // 獲得外部電源值
    float powerFloat = this.absBasePower.getPower();
    // 進(jìn)行電源轉(zhuǎn)換
    if (powerFloat == 380) {
      // 380V電源轉(zhuǎn)換
      powerFloat = powerFloat / 31.67f;
    } else if (powerFloat == 220) {
      // 220V電源轉(zhuǎn)換
      powerFloat = powerFloat / 18.33f;
    } else if (powerFloat == 110) {
      // 110V電源轉(zhuǎn)換
      powerFloat = powerFloat / 9.17f;
    } else {
      System.out.println("----不能適配電源!...");
      return;
    }
    // 處理轉(zhuǎn)換結(jié)果
    powerFloat = (int) (powerFloat * 10) / 10.0f;
    System.out.println("----這是[" + powerFloat + this.absBasePower.getUnit()
        + "]電源!...");
  }
}

3.7  12v電源類適配器

package com.demo.adapter;
import com.demo.power.AbsBasePower;
import com.demo.power.v12.IPower12;
/**
 * 電源適配器 (實現(xiàn)目標(biāo)對象接口 即:12V電源接口) 類適配器 模式
 *
 * @author
 *
 */
public class AdapterPower12Ext extends AbsBasePower implements IPower12 {
  // 適配器構(gòu)造方法 將待轉(zhuǎn)換對象傳入
  public AdapterPower12Ext(AbsBasePower absBasePower) {
    super(absBasePower.getPower());
  }
  // 實現(xiàn)目標(biāo)對象方法
  @Override
  public void output12v() {
    // 獲得外部電源值
    float powerFloat = this.getPower();
    // 進(jìn)行電源轉(zhuǎn)換
    if (powerFloat == 380) {
      // 380V電源轉(zhuǎn)換
      powerFloat = powerFloat / 31.67f;
    } else if (powerFloat == 220) {
      // 220V電源轉(zhuǎn)換
      powerFloat = powerFloat / 18.33f;
    } else if (powerFloat == 110) {
      // 110V電源轉(zhuǎn)換
      powerFloat = powerFloat / 9.17f;
    } else {
      System.out.println("----不能適配電源!...");
      return;
    }
    // 處理轉(zhuǎn)換結(jié)果
    powerFloat = (int) (powerFloat * 10) / 10.0f;
    System.out.println("----這是[" + powerFloat + this.getUnit() + "]電源!...");
  }
}

3.8  測試適配器

package com.demo;
import com.demo.adapter.AdapterPower12;
import com.demo.adapter.AdapterPower12Ext;
import com.demo.power.v12.IPower12;
import com.demo.power.v12.Power12;
import com.demo.power.v220.Power220;
/**
 * 客戶端程序調(diào)用
 *
 * @author
 *
 */
public class Client {
  /**
   * @param args
   */
  public static void main(String[] args) {
    // 我們首先 生成一個220V電源對象!
    Power220 power220 = new Power220();
    power220.output220v();
    // 接下來,我們在生成一個12V電源對象!
    IPower12 power12 = new Power12();
    power12.output12v();
    // 最后,我們使用電源適配器 將220V電源轉(zhuǎn)換為12V電源!
    System.out.println("\n----電源適配器轉(zhuǎn)換中...");
    IPower12 adapterPower12 = new AdapterPower12(power220);
    adapterPower12.output12v();
    System.out.println("----電源適配器轉(zhuǎn)換結(jié)束!");
    // 類適配器實現(xiàn)
    System.out.println("\n----類適配器 電源適配器轉(zhuǎn)換中...");
    IPower12 adapterPower12Ext = new AdapterPower12Ext(power220);
    adapterPower12Ext.output12v();
    System.out.println("----類適配器 電源適配器轉(zhuǎn)換結(jié)束!");
  }
}

3.9 運行結(jié)果

----這是[220.0V]電源!...
----這是[12.0V]電源!...
----電源適配器轉(zhuǎn)換中...
----這是[12.0V]電源!...
----電源適配器轉(zhuǎn)換結(jié)束!
----類適配器 電源適配器轉(zhuǎn)換中...
----這是[12.0V]電源!...
----類適配器 電源適配器轉(zhuǎn)換結(jié)束!

三、設(shè)計原則

1使用對象組合,面向接口和抽象編程
2“開一閉”原則

四、使用場合

1 軟件系統(tǒng)結(jié)構(gòu)需要升級或擴展,又不想影響原有系統(tǒng)穩(wěn)定運行的時候
2 轉(zhuǎn)換類之間的差別不是很大的時候
3 想創(chuàng)建一個可以復(fù)用的類,該類可以與其他不相關(guān)類或不可預(yù)見類協(xié)同工作的時候

五、類適配器模式和對象適配器模式的靜態(tài)類圖

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

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

  • 解決Mybatis查詢方法selectById()主鍵不一致問題

    解決Mybatis查詢方法selectById()主鍵不一致問題

    這篇文章主要介紹了解決Mybatis查詢方法selectById()主鍵不一致問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • SpringBoot利用MDC機制過濾單次請求的所有日志

    SpringBoot利用MDC機制過濾單次請求的所有日志

    在服務(wù)出現(xiàn)故障時,我們經(jīng)常需要獲取一次請求流程里的所有日志進(jìn)行定位 ,如何將一次數(shù)據(jù)上報請求中包含的所有業(yè)務(wù)日志快速過濾出來,就是本文要介紹的,需要的朋友可以參考下
    2024-04-04
  • Java并發(fā)編程之JUC并發(fā)核心AQS同步隊列原理剖析

    Java并發(fā)編程之JUC并發(fā)核心AQS同步隊列原理剖析

    AbstractQueuedSynchronizer 簡稱 AQS,可能我們幾乎不會直接去使用它,但它卻是 JUC 的核心基礎(chǔ)組件,支撐著 java 鎖和同步器的實現(xiàn),大神 Doug Lea 在設(shè)計 JUC 包時希望能夠抽象一個基礎(chǔ)且通用的組件以支撐上層模塊的實現(xiàn),AQS 應(yīng)運而生
    2021-09-09
  • 學(xué)習(xí)Java之File文件操作方法

    學(xué)習(xí)Java之File文件操作方法

    這篇文章我們主要學(xué)習(xí)如何實現(xiàn)IO流的具體操作,但很多時候,IO流都會操作一個文件,所以我們需要先學(xué)習(xí)在Java中如何操作文件,包括文件及文件夾的創(chuàng)建、遍歷、刪除等,有了文件操作的基礎(chǔ),我們才能更好地操作IO流,文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-09-09
  • java?實現(xiàn)獲取指定位置后的第一個數(shù)字

    java?實現(xiàn)獲取指定位置后的第一個數(shù)字

    這篇文章主要介紹了java?實現(xiàn)獲取指定位置后的第一個數(shù)字,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Springboot整合FreeMarker的實現(xiàn)示例

    Springboot整合FreeMarker的實現(xiàn)示例

    本文主要介紹了Springboot整合FreeMarker的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java中Iterator(迭代器)的用法詳解

    Java中Iterator(迭代器)的用法詳解

    Java迭代器(Iterator)是?Java?集合框架中的一種機制,它提供了一種在不暴露集合內(nèi)部實現(xiàn)的情況下遍歷集合元素的方法。本文主要介紹了它的使用方法,希望對大家有所幫助
    2023-05-05
  • 一個簡單的Python名片管理系統(tǒng)

    一個簡單的Python名片管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了一個簡單的Python名片管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • MyBatis Plus構(gòu)建一個簡單的項目的實現(xiàn)

    MyBatis Plus構(gòu)建一個簡單的項目的實現(xiàn)

    這篇文章主要介紹了MyBatis Plus構(gòu)建一個簡單的項目的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 最新評論

    福建省| 松江区| 阜康市| 宝鸡市| 遵化市| 历史| 长岭县| 武城县| 全州县| 阿图什市| 开封县| 海盐县| 龙井市| 光泽县| 敖汉旗| 砚山县| 钟祥市| 汪清县| 罗平县| 安仁县| 交城县| 类乌齐县| 通海县| 鄢陵县| 灵石县| 焦作市| 南宫市| 沂南县| 洪泽县| 神农架林区| 凤凰县| 武威市| 罗定市| 奎屯市| 馆陶县| 合肥市| 资中县| 城固县| 马公市| 民和| 交口县|