设计模式之适配器模式
2017-10-19 15:04
281 查看
适配器分类:
1.对象适配器:采用组合方式的适配器
2.类适配器:采用继承方式的适配器
两者的区别:
对象适配器把“被适配着”作为一个对象组合到适配器类中,以修改目标接口包装被适配者
类适配器通过多重继承不兼容接口,实现对目标接口的匹配,单一的为某个类而实现适配
适配器作用:
1.透明 :通过适配器客户端可以调用同一接口,这样做更简单、直接、紧凑
2.重用 :复用了现存的类,解决了现存的类与复用环境要求不一致的问题
3.低耦合 :将目标类与适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有的类(遵循开闭原则)
对象适配器 代码示例:(一台笔记本电脑只能使用三孔插座 但是现在只存在两孔插座)
两孔插座 GBTwoPlug 类
/**
*两孔插座
*/
public class GBTwoPlug {
public void powerWithTwo(){
System.out.println("使用两孔插座充电");
}
}三孔插座接口 ThreePlugif 接口类
/**
*三孔插座接口
*/
public interface ThreePlugif {
void PowerWithThree();
}两孔转三孔适配器 对象适配器TwoPlugAdapter 类
/**
* 两孔转三孔适配器
*/
public class TwoPlugAdapter implements ThreePlugif {
private GBTwoPlug plug; //两孔
public TwoPlugAdapter(GBTwoPlug twoPlug){
this.plug=twoPlug;
}
@Override
public void PowerWithThree() {
System.out.println("通过组合适配器转换");
plug.powerWithTwo();
}
}
两孔转三孔适配器类适配器 TwoPlugAdapterExtends 类代码示例:
/**
* 继承方式的插座适配器
*/
public class TwoPlugAdapterExtends extends GBTwoPlug implements ThreePlugif {
@Override
public void PowerWithThree() {
System.out.println("借助继承适配器");
this.powerWithTwo();
}
}
笔记本电脑 NotBook类
/**
* 笔记本
*/
public class NoteBook {
private ThreePlugif plugif;
public NoteBook(ThreePlugif plugif){
this.plugif=plugif;
}
//使用插座
public void charge(){
plugif.PowerWithThree();
}
public static void main(String[] args){
GBTwoPlug two=new GBTwoPlug(); //只有两孔插座
ThreePlugif plugif= new TwoPlugAdapter(two); //使用适配器 两孔转三孔
NoteBook nb=new NoteBook(plugif); //需要用三孔插座
nb.charge();
System.out.println("--------使用类适配器------------");
plugif =new TwoPlugAdapterExtends();
nb=new NoteBook(plugif);
nb.charge();
}
}
1.对象适配器:采用组合方式的适配器
2.类适配器:采用继承方式的适配器
两者的区别:
对象适配器把“被适配着”作为一个对象组合到适配器类中,以修改目标接口包装被适配者
类适配器通过多重继承不兼容接口,实现对目标接口的匹配,单一的为某个类而实现适配
适配器作用:
1.透明 :通过适配器客户端可以调用同一接口,这样做更简单、直接、紧凑
2.重用 :复用了现存的类,解决了现存的类与复用环境要求不一致的问题
3.低耦合 :将目标类与适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有的类(遵循开闭原则)
对象适配器 代码示例:(一台笔记本电脑只能使用三孔插座 但是现在只存在两孔插座)
两孔插座 GBTwoPlug 类
/**
*两孔插座
*/
public class GBTwoPlug {
public void powerWithTwo(){
System.out.println("使用两孔插座充电");
}
}三孔插座接口 ThreePlugif 接口类
/**
*三孔插座接口
*/
public interface ThreePlugif {
void PowerWithThree();
}两孔转三孔适配器 对象适配器TwoPlugAdapter 类
/**
* 两孔转三孔适配器
*/
public class TwoPlugAdapter implements ThreePlugif {
private GBTwoPlug plug; //两孔
public TwoPlugAdapter(GBTwoPlug twoPlug){
this.plug=twoPlug;
}
@Override
public void PowerWithThree() {
System.out.println("通过组合适配器转换");
plug.powerWithTwo();
}
}
两孔转三孔适配器类适配器 TwoPlugAdapterExtends 类代码示例:
/**
* 继承方式的插座适配器
*/
public class TwoPlugAdapterExtends extends GBTwoPlug implements ThreePlugif {
@Override
public void PowerWithThree() {
System.out.println("借助继承适配器");
this.powerWithTwo();
}
}
笔记本电脑 NotBook类
/**
* 笔记本
*/
public class NoteBook {
private ThreePlugif plugif;
public NoteBook(ThreePlugif plugif){
this.plugif=plugif;
}
//使用插座
public void charge(){
plugif.PowerWithThree();
}
public static void main(String[] args){
GBTwoPlug two=new GBTwoPlug(); //只有两孔插座
ThreePlugif plugif= new TwoPlugAdapter(two); //使用适配器 两孔转三孔
NoteBook nb=new NoteBook(plugif); //需要用三孔插座
nb.charge();
System.out.println("--------使用类适配器------------");
plugif =new TwoPlugAdapterExtends();
nb=new NoteBook(plugif);
nb.charge();
}
}
相关文章推荐
- 设计模式之适配器模式
- 设计模式之适配器模式
- 菜鸟版JAVA设计模式—适配器模式,装饰模式,代理模式异同
- 设计模式思考----适配器模式
- 设计模式之适配器模式
- 【软考学习】设计模式——适配器模式
- 设计模式(五)--适配器模式
- Head First 设计模式之适配器模式与外观模式
- 设计模式----适配器模式
- 适配器模式 - 设计模式学习
- Android设计模式系列(9)--SDK源码之适配器模式
- 设计模式第三话——适配器模式
- 设计模式之适配器模式
- Java设计模式之《适配器模式》及应用场景
- 设计模式探索之适配器模式
- java设计模式--结构型模式--适配器模式
- 设计模式练习:适配器模式
- C# 设计模式 之 适配器模式(Adapter)
- 设计模式之适配器模式
- Java经典设计模式-结构型模式-适配器模式(Adapter)