23种设计模式之(八)适配器模式(Adapter)
本文主要介绍23种设计模式之适配器模式,附详细python/c++示例代码。
- 概念
- 应用场景
- 注意事项
- 代码示例
- 总结
- 代码链接
适配器模式(Adapter)
概念
适配器模式,是构造型模式之一,通过Adapter模式可以改变已有类(或外部类)的接口形式。
GoF对适配器模式的定义是:将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
应用场景
(1)想要使用一个已经存在的类,但是它却不符合现有的接口规范,导致无法直接去访问,这时创建一个适配器就能间接去访问这个类中的方法。
(2)我们有一个类,想将其设计为可重用的类(可被多处访问),我们可以创建适配器来将这个类来适配其他没有提供合适接口的类。
(3)想要使用接口中的某个或某些方法,但是接口中有太多方法,我们要使用时必须实现接口并实现其中的所有方法,可以使用抽象类来实现接口,并不对方法进行实现(仅置空),然后我们再继承这个抽象类来通过重写想用的方法的方式来实现。这个抽象类就是适配器。
代码示例
C++代码示例
/************************************************************************/
/* 设计模式专题
/*
/* 适配器模式
/*
/* Author : zzl
/*
/* 编程环境: window10 vs2010
/*
/* Date : 20180915
/************************************************************************/
#include <iostream>
// Current18
// Current220
// Adapter
class Current18v
{
public:
virtual void useCurrent18v() = 0;
};
class Current220v
{
public:
void useCurrent220v()
{
printf("i am 220v,welcome to use\n");
}
};
class Adapter : public Current18v
{
public:
Adapter(Current220v *current)
{
m_current = current;
}
virtual void useCurrent18v()
{
printf("i am 18v adpter , i can adpte 220v \n");
m_current->useCurrent220v();
}
private:
Current220v *m_current;
};
void main()
{
Current220v *current220v = NULL;
Adapter *adapter = NULL;
current220v = new Current220v;
adapter = new Adapter(current220v);
adapter->useCurrent18v();
delete current220v ;
delete adapter;
}
python代码示例
# -*- coding: utf-8 -*-
###################################################################
# 设计模式专题
#
# 适配器模式
#
# Author : zzl
#
# 编程环境: window10 python2.7
#
# Date : 20180915
##################################################################
# Current18
# Current220
# Adapter
class Current18v(object):
def use_current18v(self):
pass
class Current220v(object):
def use_current220v(self):
print("i am 220v,welcome to use\n")
class Adapter(Current18v):
def __init__(self, current):
self.m_current = current
def use_current18v(self):
print("i am 18v adpter , i can adpte 220v")
self.m_current.use_current220v()
if __name__ == "__main__":
current220v = Current220v()
adapter = Adapter(current220v)
adapter.use_current18v()