Pattern: Adapter 简单实现
来源:互联网 发布:c .net编程题 编辑:程序博客网 时间:2024/05/17 23:04
在 android 编程中,形形色色的 Adapter 到处可见,其复杂的设计让人惊嘘不已!
结合自己的亲身体会,跟大家聊聊适配器这这种设计模式。
欢迎拍砖!
很形象的一个例子
现在你手头上有一台笔记本,需要充电,不然最后一关抢宝藏的游戏可能要泡汤了,怎么办?
很简单,找个适配器充电呗!
于是乎,适配器找到了,电源是现成的,终于可以重新开战了!
这个过程很简单,但是蕴涵了今天所说的适配器(Adapter)。
试想一下,没有适配器的话,你不可能把 220V 的电压直接接在你心爱的笔记本上面吧?!
适配器,简单来说就是整合已有的资源供别人使用的一个工具。
软件实现
具体实现有两中方式,使用继承或者聚合(可以说是委派)。
Power.java
package mark.zhang;public class Power {public void supply() {System.out.println("power is suppling voltage......"); }}
IConvertor.java
package mark.zhang;public interface IConvertor {public abstract void convert();}
PC.java
package mark.zhang;public class PC {Adapter mAdapter;public void setAdapter(Adapter adapter) {mAdapter = adapter;mAdapter.convert();work();}public void work() {System.out.println("pc is working......");}}
接下来可以设计 Adapter
聚合的方式实现 Adapter.java
package mark.zhang;public class Adapter implements IConvertor {Power power;public Adapter() {power = new Power();}@Overridepublic void convert() {power.supply();}}
简单的实现了 Power 适配器。
继承的方式实现 Adapter.java
package mark.zhang;public class Adapter extends Power implements IConvertor {@Overridepublic void convert() {supply();}}
客户端调用 Client.java
package mark.zhang;public class Client {public static void main(String[] args) {PC pc = new PC();Adapter a = new Adapter();pc.setAdapter(a);}}
可以看出,无论那种方式实现 Adapter,Adapter 都实现了接口方法,目的就是调用 Power 的 supply.
但是这种简单的实现缺点还是很多的
比如,各个类设计过于具体(相对于抽象来说),程序没有弹性,没有面向抽象(或者接口)编程的思想。
还好,今天只是介绍一下 Adapter,复杂的实现,后面再说。
- Pattern: Adapter 简单实现
- Pattern: Adapter 中级实现
- traits 的pattern 方法实现strategy adapter
- 设计模式实现(六): Adapter Pattern
- Adapter Pattern
- Adapter Pattern
- Adapter pattern
- Adapter Pattern
- Adapter Pattern
- Adapter Pattern
- Adapter Pattern
- Adapter Pattern
- (C++实现)——适配器模式(Adapter Pattern)
- 适配器模式(Adapter Pattern)(C++实现)
- 设计模式之适配器模式(Adapter Pattern)C++实现
- Java实现(06)——适配器模式(Adapter Pattern)
- Design Pattern - Structural Pattern - Adapter
- Design Pattern(6)-Adapter Pattern
- 函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先后顺序
- 移动应用表单设计秘籍
- 我的减肥经历和一些经验[1]
- 删除非空文件夹(linux c 递归)
- AMD Dual Core Vs. Intel Dual Core
- Pattern: Adapter 简单实现
- 开源数据库列表
- 《花开半夏》--5 证人(1)
- puppet 部署
- 世界上最高的山峰的排名
- Qt4.7.3交叉编译移植
- 删除oracle一批表 批量删除oracle中表 -清理回收站
- iPhone超霸气音响 山寨机外放听歌党你们颤抖了吗?
- 《花开半夏》--5 证人(2)