设计模式之适配器模式的学习思考
来源:互联网 发布:万方数据库下载器 编辑:程序博客网 时间:2024/06/06 02:43
适配器模式是设计模式里的结构型模式一种
其功能如其名字一样——适配,主要用于接口适配,通过接口转换,将一个类插在另一个类中
打个比方,美国电器 110V,中国 220V,就要有一个适配器将 110V 转化为 220V。
优点:
- 可以让两个没有关联的类一起运行
- 提高了类的复用
- 比较灵活
缺点:
- 过多地使用适配器,会让系统非常零乱
- 由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类
思路:
- 创建两个接口和其实现类,分别生成不同的对象
- 创建适配器类,实现的接口是想要有新功能的接口,一般是低级接口,其功能是实现新功能(方法实现)
- 低级接口的另一个实现类内部声明适配器类对象,方法实现新功能
4.public类main方法实现整个调用
具体设计:
- 我们有手机和平板两个电子设备,手机可以打电话,平板可以上网和玩游戏,现在我们想手机也可以上网和玩游戏,这时就需要一个适配器来给手机增加新功能
- 两个接口,一个是MobliePhone,另一个是TabletsT
- 先实现Tablets接口,分别是NetPlayer和GamePlayer两个类实现各自功能
- 创建适配类实现MobilePhone接口,其功能是隐继承Tablets的两个功能,通过构造类返回对象和方法play调用各自功能
- 创建MobilePlayer类实现MobilePhone接口,其功能也是隐继承适配类和实现接口方法
- 最后public类AdapterPatternDemo来实现main方法
具体代码:
interface MobilePhone{ void play(String functionType, String dosh);}interface Tablets{ void playNet(String dosh); void playGame(String dosh);}class NetPlayer implements Tablets{ @Override public void playNet(String dosh) { // TODO Auto-generated method stub System.out.println("Playing net Name:"+dosh); } @Override public void playGame(String dosh) { // TODO Auto-generated method stub }}class GamePlayer implements Tablets{ @Override public void playNet(String dosh) { // TODO Auto-generated method stub } @Override public void playGame(String dosh) { // TODO Auto-generated method stub System.out.println("Playing Game Name:"+dosh); }}class Adapter implements MobilePhone{ Tablets tablets; //接口型 public Adapter(String functionType) { if(functionType=="net"){ tablets=new NetPlayer(); }else if(functionType=="game"){ tablets=new GamePlayer(); } } public void play(String functionType,String dosh){ if(functionType=="net"){ tablets.playNet(dosh); }else if(functionType=="game"){ tablets.playGame(dosh); } }}class MobilePlayer implements MobilePhone{ Adapter adapter; public void play(String functionType, String dosh) { if(functionType=="call"){ System.out.println("Playing call Name:"+dosh); }else if(functionType=="net"){ System.out.println("Playing net Name:"+dosh); }else if(functionType=="game"){ System.out.println("Playing game Name:"+dosh); } else{ System.out.println(dosh); } }}public class AdapterPatternDemo { public static void main(String[] args) { MobilePlayer mobilePlayer=new MobilePlayer(); mobilePlayer.play("call", "打给李明"); mobilePlayer.play("net", "我在上网"); mobilePlayer.play("game", "游戏很好玩"); mobilePlayer.play("sor", "sorry"); }}
输出如下:
Playing call Name:打给李明Playing net Name:我在上网Playing game Name:游戏很好玩sorry
总结:针对接口的编程,非常具有结构型,严谨的构造顺序
阅读全文
1 0
- 设计模式之适配器模式的学习思考
- 设计模式--对适配器模式的思考
- 设计模式思考----适配器模式
- 设计模式学习之---Adapter(适配器)模式
- 设计模式学习笔记之适配器模式
- 设计模式入门学习之适配器模式
- 设计模式之适配器模式学习
- 设计模式学习之适配器模式
- 设计模式学习之适配器模式
- HeadFrist设计模式学习之适配器模式
- 设计模式学习之路-适配器模式
- 设计模式学习笔记之适配器模式
- 设计模式学习笔记之适配器模式
- java设计模式学习之适配器模式
- 设计模式学习系列之适配器模式
- 设计模式学习之适配器模式
- 设计模式学习之适配器模式
- 设计模式学习之适配器模式
- 为ROS navigation功能包添加自定义的全局路径规划器(Global Path Planner)
- 实例的生命周期
- 分类与聚类的区别
- 那些年Android黑科技②:欺骗的艺术
- 内容提供器访问Android数据库时候必须版本对应一致
- 设计模式之适配器模式的学习思考
- 芯片巨头英特尔放弃竞争迷你计算机市场
- QQWry.dat 数据写入
- 控件easyui-combobox动态设置默认值
- 5、面向对象的设计思想
- 机器学习C++库:dlib
- springmvc控制器
- DB2 的REORG_学习(1)_REORG INDEXES/TABLE Command
- 【怎样写代码】向现有类型“添加”方法 -- 扩展方法(二):扩展方法的实现与调用