`
cakin24
  • 浏览: 1330508 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

适配器模式应用——电源适配器

阅读更多

一模式定义

存在两种适配器模式

1 对象适配器模式,在这种适配器模式中,适配器容纳一个它包裹的类对象的物理实体。

2 类适配器模式,在这种适配器模式中,适配器继承自已实现的类。

二模式举例

1模式分析

我们借用笔计本电源适配器来说明这一模式。

已经存在的交流电源

笔记本电脑

电源适配器


 

2适配器模式的静态建模



 

3代码举例

3.1抽象电源建立

package com.demo.power;

/**
 * 电源基类
 * 
 * @author
 * 
 */
public abstract class AbsBasePower
{
	// 电压值
	private float power;
	// 单位
	private String unit = "V";

	// 构造方法
	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电源实现类

package com.demo.power.v220;

import com.demo.power.AbsBasePower;

/**
 * 220V电源
 * 
 * @author
 * 
 */
public class Power220 extends AbsBasePower implements IPower220
{
	// 构造方法
	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电源实现类

package com.demo.power.v12;

import com.demo.power.AbsBasePower;

/**
 * 正常的12V电源
 * 
 * @author
 * 
 */
public class Power12 extends AbsBasePower implements IPower12 {

	// 12V电源构造方法
	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;

/**
 * 电源适配器 (实现目标对象接口 即:12V电源接口)
 * 
 * @author
 * 
 */
public class AdapterPower12 implements IPower12 {
	// 待转换的对象
	private final AbsBasePower absBasePower;

	// 适配器构造方法 将待转换对象传入
	public AdapterPower12(AbsBasePower absBasePower) {
		this.absBasePower = absBasePower;
	}

	// 实现目标对象方法
	public void output12v() {
		// 获得外部电源值
		float powerFloat = this.absBasePower.getPower();
		// 进行电源转换
		if (powerFloat == 380) {
			// 380V电源转换
			powerFloat = powerFloat / 31.67f;
		} else if (powerFloat == 220) {
			// 220V电源转换
			powerFloat = powerFloat / 18.33f;
		} else if (powerFloat == 110) {
			// 110V电源转换
			powerFloat = powerFloat / 9.17f;
		} else {
			System.out.println("----不能适配电源!...");
			return;
		}

		// 处理转换结果
		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;

/**
 * 电源适配器 (实现目标对象接口 即:12V电源接口) 类适配器 模式
 * 
 * @author
 * 
 */
public class AdapterPower12Ext extends AbsBasePower implements IPower12 {

	// 适配器构造方法 将待转换对象传入
	public AdapterPower12Ext(AbsBasePower absBasePower) {
		super(absBasePower.getPower());
	}

	// 实现目标对象方法
	@Override
	public void output12v() {
		// 获得外部电源值
		float powerFloat = this.getPower();
		// 进行电源转换
		if (powerFloat == 380) {
			// 380V电源转换
			powerFloat = powerFloat / 31.67f;
		} else if (powerFloat == 220) {
			// 220V电源转换
			powerFloat = powerFloat / 18.33f;
		} else if (powerFloat == 110) {
			// 110V电源转换
			powerFloat = powerFloat / 9.17f;
		} else {
			System.out.println("----不能适配电源!...");
			return;
		}

		// 处理转换结果
		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;

/**
 * 客户端程序调用
 * 
 * @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电源转换为12V电源!
		System.out.println("\n----电源适配器转换中...");
		IPower12 adapterPower12 = new AdapterPower12(power220);
		adapterPower12.output12v();
		System.out.println("----电源适配器转换结束!");

		// 类适配器实现
		System.out.println("\n----类适配器 电源适配器转换中...");
		IPower12 adapterPower12Ext = new AdapterPower12Ext(power220);
		adapterPower12Ext.output12v();
		System.out.println("----类适配器 电源适配器转换结束!");
	}
}

 3.9 运行结果

----这是[220.0V]电源!...

----这是[12.0V]电源!...

 

----电源适配器转换中...

----这是[12.0V]电源!...

----电源适配器转换结束!

 

----类适配器 电源适配器转换中...

----这是[12.0V]电源!...

----类适配器 电源适配器转换结束!

三 设计原则

1使用对象组合,面向接口和抽象编程

2“开一闭”原则

四 使用场合

1软件系统结构需要升级或扩展,又不想影响原有系统稳定运行的时候

2转换类之间的差別不是很大的时候

3想创建一个可以复用的类,该类可以与其他不相关类或不可预见类协同工作的时候

五 类适配器模式和对象适配器模式的静态类图



 

  • 大小: 15.1 KB
  • 大小: 43.3 KB
  • 大小: 28.7 KB
分享到:
评论

相关推荐

    深入浅出设计模式(中文版)

    4.3.2组合模式的现实应用——资源管理器 117 4.3.3C#实例——图形树状对象结构 118 4.3.4Java实例——文档格式化 121 4.3.5优势和缺陷 124 4.3.6应用情景 125 4.4DecoratorPattern(装饰模式) 125 4.4.1定义 ...

    深入浅出设计模式(中文版电子版)

    4.3.2组合模式的现实应用——资源管理器 117 4.3.3C#实例——图形树状对象结构 118 4.3.4Java实例——文档格式化 121 4.3.5优势和缺陷 124 4.3.6应用情景 125 4.4DecoratorPattern(装饰模式) 125 4.4.1定义 ...

    实例解读51单片机完全学习与应用

    电源适配器 3.6.4 单片机系统电源方案三: USB口供电 3.7 ■元器件插曲之五:晶振与振荡器 3.7.1 晶振基础知识 3.7.2 振荡器 3.8 ■诠释单片机最简系统 3.8.1 单片机最简系统 3.8.2 电源端(VCC、GND) 3.8.3 时钟...

    SD4054是一个完整的恒流/恒压单节锂离子电池线性充电器

    入电源(墙壁适配器或USB电源)被删除, SD4054自动进入低电流状态,下降电池漏电流小 于2uA。该SD4054可以进入shutown模式,减少 他的电源电流为25uA。其他功能包括充电电流监 控,欠压锁定,自动充电和状态引脚指示...

    电源技术中的士兰微电子推出一款应用于开关电源的内置高压MOSFET、电流模式PWM控制器

    可广泛应用于机顶盒、DVD播放机、电源适配器等整机产品中。  内置的15ms软启动电路减小了电路启动时变压器的应力;电路的开关频率为67KHz,振荡电路产生的频率抖动,可以降低EMI;在待机模式下,电路进入打嗝模式...

    电源技术中的ST的ac-dc转换器专用开关芯片适合离线电源应用

    意法半导体(ST)公司近日推出一款离线AC/DC电源转换器用一次侧(primary-side)开关——VIPer53E。此器件适用于DVD播放器、LCD监视器、STB、游戏控制台及其它适配器和服务器的待机电源。 VIPer53E可用来构建次级功率...

    电源技术中的士兰微电子即将推出内置高压MOSFET节能电源控制器

    可广泛应用于机顶盒、DVD播放机、电源适配器等整机产品中。  该系列芯片具有峰值电流补偿电路,可以为芯片提供最大功率平衡,该电路初始化后,可有效的减小芯片启动时变压器的应力。根据负载的实际情况,芯片的...

    198个电脑精华解决方案

     Auto On Mod 自动开机模式:注意若交流电源适配器没有接好,该设置将无法生效。该选项可设置计算机自动开机时间,可以设置将计算机每天自动开机或仅在工作日自动开机。设置在计算机重新启动后生效。  Auto On ...

    【开源】非特定人类语音识别控制板——适用于智能家居、远程语音点歌系统,远程语音机器人控制等-电路方案

    输入电压:6~12V DC,推荐使用7.5V电源适配器或7.4V锂电池。 尺寸:长57mm× 宽47mm ASR 非特定人类语音识别控制板涉及到的重要技术资料: 语音识别模块LD3320介绍及开发应用:...

    计算机组成原理本科复习题1

    4. (11分)某计算机有如下部件:ALU,移位器,主存M,主存数据寄存器MDR,主存地址寄存器MAR,指令寄存器IR,通用寄存器R0——R3 ,暂存器C和D。 (1) 请将各逻辑部件组成一个数据通路,并标明数据流向。 (2) 画...

    windowsnt 技术内幕

    考察HKEY_LOCAL_MACHINE\CurrentControlSet\Services子键 RegEdit简介 Regedit32简介 配置硬件配置文件 配置通信端口 配置显示设置 增加SCSI适配器 配置能够响应电源故障事件的设备 为UPS使用特殊串行电缆 增加或...

Global site tag (gtag.js) - Google Analytics