牛逼plus!原来适配器模式竟然是这样用的
Posted autofelix
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛逼plus!原来适配器模式竟然是这样用的相关的知识,希望对你有一定的参考价值。
〝 古人学问遗无力,少壮功夫老始成 〞
适配器模式的出现是为了规范统一代码的入口,比如在某个场景中,之前老员工写了很多接口你去调用,但是突然有一天,上司说要换个接口方法名称调用,比如之前你调用get方法获取数据,现在上司觉得obtain这个名字更好看,需要你用这个方法名字去实现同样的功能,你是直接改后端代码的方法名称? 这肯定行不通,因为项目不止你这一个地方调用这个方法,一旦修改,其他地方就无法使用了,那么你是去重新复制一段那个代码,改个名字? 当然不是不可以,但是这样就显得臃肿了,所以适配器方法应用而生,官方对适配器模式的解释为: 将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本的由于接口不兼容而不能一起工作的那些类可以一起工作。记得九阳神功中一句话说的: 他强由他强,清风拂山冈,他横由他横,明月照大江,其实说的不就是适配器模式吗? 不管你怎么变,其实最终大道化简,都是一样的。
目录
一、应用适配器模式前
- 老程序猿写了下面的代码,用来获取你输入的字符串的接口
- 你只要调用他的 getStr 方法即可
- 但是这时候老板需要让你改成 getString 方法实现相同的功能
- 下面代码中的错误示范,列出了最笨的解决方法,这种方法写了重复代码,必然很臃肿
<?php
class A
{
private $str;
public function __construct($str)
{
$this->str = $str;
}
public function getStr()
{
return $this->str;
}
//错误示范
public function getString()
{
return $this->str;
}
}
//适配器模式前
$a = new A('i am autofelix');
$result = $a->getStr();
var_dump($result);
二、应用适配器模式后
<?php
class A
{
private $str;
public function __construct($str)
{
$this->str = $str;
}
public function getStr()
{
return $this->str;
}
}
//定义统一接口
interface AInterface {
function getString();
}
class B implements AInterface
{
/**
* @var A
*/
private $_A;
public function __construct($class)
{
$this->_A = $class;
}
public function getString()
{
return $this->_A->getStr();
}
}
//适配器模式前
$a = new A('i am autofelix');
$result = $a->getStr();
var_dump($result);
//适配器模式后
$b = new B($a);
$result = $b->getString();
var_dump($result);
猜你喜欢:
以上是关于牛逼plus!原来适配器模式竟然是这样用的的主要内容,如果未能解决你的问题,请参考以下文章