溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java適配器模式應(yīng)用之電源適配器功能的示例分析

發(fā)布時(shí)間:2021-08-20 11:43:56 來源:億速云 閱讀:155 作者:小新 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)Java適配器模式應(yīng)用之電源適配器功能的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

一、模式定義

存在兩種適配器模式

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

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

二、模式舉例

1 模式分析

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

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

Java適配器模式應(yīng)用之電源適配器功能的示例分析

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

Java適配器模式應(yīng)用之電源適配器功能的示例分析

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電源實(shí)現(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電源實(shí)現(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;
/**
 * 電源適配器 (實(shí)現(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;
  }
  // 實(shí)現(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;
/**
 * 電源適配器 (實(shí)現(xiàn)目標(biāo)對象接口 即:12V電源接口) 類適配器 模式
 *
 * @author
 *
 */
public class AdapterPower12Ext extends AbsBasePower implements IPower12 {
  // 適配器構(gòu)造方法 將待轉(zhuǎn)換對象傳入
  public AdapterPower12Ext(AbsBasePower absBasePower) {
    super(absBasePower.getPower());
  }
  // 實(shí)現(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é)束!");
    // 類適配器實(shí)現(xiàn)
    System.out.println("\n----類適配器 電源適配器轉(zhuǎn)換中...");
    IPower12 adapterPower12Ext = new AdapterPower12Ext(power220);
    adapterPower12Ext.output12v();
    System.out.println("----類適配器 電源適配器轉(zhuǎn)換結(jié)束!");
  }
}

3.9 運(yùn)行結(jié)果

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

三、設(shè)計(jì)原則

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

四、使用場合

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

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

Java適配器模式應(yīng)用之電源適配器功能的示例分析

關(guān)于“Java適配器模式應(yīng)用之電源適配器功能的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI