GoF设计模式-适配器模式

    适配器模式(重要):
        又叫包装器,将一个接口转换成另一个用户希望的接口,使得原本不兼容的两个类可以协同工作。既可以作为类结构型模式,又可以作为对象结构型模式。由目标抽象类、适配器类、适配者类、客户类组成,客户类针对目标抽闲类编程,适配器模式更多的是强调对代码的组织,而不是功能的实现。
    类适配器模式:适配器类与适配者类是继承关系,适配器类继承适配者类,实现目标抽象接口
    对象适配器模式:适配器类与适配者类是关联关系,适配器类关联适配者类,继承目标抽象类
    
    适配器的适用场景:
        1.系统要使用现有的类,而这些类的接口不符合系统的需要
        2.建立一个可重复使用的类,将这个类与那些不太兼容的类一起工作
    
    适配器的优点:
        1.将目标抽象类与适配者类解耦,使用适配器类来重用现有的适配者类,无须修改原有代码
        2.将具体的实现封装到适配者类中,增加了类的透明性和复用性,具有良好的灵活性和可扩展性。新增适配器类不需要修改原有代码,符合开闭原则
        3.类适配器模式中,适配器类可以覆盖适配者类的一些方法,具有很强的灵活性。对象适配器可以适配多个适配者类。
        
    适配器的缺点:
        1.类适配器模式的缺点是不能适配多个适配者类和目标类必须为接口(因为不支持多继承),对象适配器模式的缺点是不能够重写适配者类的方法
    
    适配器的应用:
        1.JDBC驱动是介于JDBC接口和数据库引擎接口之间的适配器软件
        2.Spring AOP中的BeforeAdvice、AfterAdvice和ThrowsAdvice三种通知类型借助适配器模式来实现,允许用户向框架中加入任何一种自己想要支持的通知类型。
        
    默认适配器模式:当不需要全部实现接口中的所有方法时,可先设计一个抽象类实现该接口,并为接口中的每个方法提供一个默认实现(空方法),这样该抽象类的子类就可以选择地覆盖父类的某些方法来实现需求,适用于一个类不想使用实现的接口中所有方法的情景,也称为单接口适配器模式。
    适配者接口:要适配的对象,是一个接口
    默认适配器类:是一个实现了适配者接口的抽象类
    具体业务类:是默认适配器的子类,有选择地覆盖默认适配器类中的方法

适配器模式的例子(类适配器):模拟数据库引擎和JDBC接口

适配者类(数据库引擎)

public class SqlConnection {
	
	public void sqlStart() {
		System.out.println("数据库初始化。。。");
	}
	
	public void sqlClose() {
		System.out.println("数据库关闭。。。");
	}
}

目标抽象接口(JDBC接口)

public interface ConnectDB {
	public void start();
	public void close();
}

适配器类(mysql JDBC驱动)

public class MysqlAdapter extends SqlConnection implements ConnectDB{

	 /**
	 * @Description: TODO
	 * @author doudou
	 * @date 2019年10月9日
	 * @throws
	 * @return
	 * @see structural.AdapterPattern.ConnectDB#start()
	*/
	@Override
	public void start() {
		sqlStart();
	}

	 /**
	 * @Description: TODO
	 * @author doudou
	 * @date 2019年10月9日
	 * @throws
	 * @return
	 * @see structural.AdapterPattern.ConnectDB#close()
	*/
	@Override
	public void close() {
		sqlClose();
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软考诸葛老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值