螃蟹学PHP设计模式之适配器模式

之前对java的设计模式略有了解,但是螃蟹目前是靠PHP吃饭,所以对于进阶学习php设计模式还是很有必要。螃蟹虽然做开发两年了,但是在老鸟眼中还是菜鸟,为了自己写的代码更容易维护和进行团队协作,所以我要搞定设计模式。希望螃蟹今年能创业成功或找个好工作。

1.适配器模式

螃蟹的理解是你买了港行的iphone手机,发现自家的插座和手机自带的插头不配,怎么办呢,就需要一个转换器(适配器)。可能原来系统的类不是你设计的,但是现在你要使用原来的类,发现有问题,但原来的类又不能动,或者不需要动,这样你写一个类继承原来的类,再在新的类中添加想要的东西,再拿去用就可以了。螃蟹还是写一下代码记得牢固一点。

参考项目模块:会员系统

螃蟹之前遇到过某项目的会员系统,原来的会员对象已经定义了,但是新的项目又需要使用原系统的对象,但是新项目又增加了几个属性,这样适配器模式就利用上了,下面代码敲一遍,螃蟹写的代码都是在zend studio里面手打的并且测试过了的

原会员系统会员对象类User.class.php:

<?php
class User{
	private $username = null;
	private $password = null;

	function __construct($user){
		$this->username = $user[‘username‘];
		$this->password = $user[‘password‘];
	}
	/**
	 * @return the $username
	 */
	public function getUsername() {
		return $this->username;
	}

	/**
	 * @return the $password
	 */
	public function getPassword() {
		return $this->password;
	}

	/**
	 * @param NULL $username
	 */
	public function setUsername($username) {
		$this->username = $username;
	}

	/**
	 * @param NULL $password
	 */
	public function setPassword($password) {
		$this->password = $password;
	}

}
?>

现在需要增加邮箱和个人简介,那原来的类不能直接改,那就使用适配器吧,创建UserAdapter.class.php

<?php
require(‘User.class.php‘);

class UserAdapter extends User{
	private $email = null;
	private $description = null;

	function __construct($user){
		parent::__construct($user);
		$this->email = $user[‘email‘];
		$this->description = $user[‘description‘];
	}
	/**
	 * @return the $email
	 */
	public function getEmail() {
		return $this->email;
	}

	/**
	 * @return the $description
	 */
	public function getDescription() {
		return $this->description;
	}

	/**
	 * @param NULL $email
	 */
	public function setEmail($email) {
		$this->email = $email;
	}

	/**
	 * @param NULL $description
	 */
	public function setDescription($description) {
		$this->description = $description;
	}

}
?>

好的,我来测试一下结果:TestAdapter.php

<?php
require(‘UserAdapter.class.php‘);

//模拟用户数据
$user = array(‘username‘=>‘螃蟹‘,‘password‘=>‘SB123456‘,‘email‘=>‘[email protected]‘,‘description‘=>‘螃蟹也会思考‘);
//实例化适配器对象
$userobj = new UserAdapter($user);
//输出结果
echo ‘   Username: ‘.$userobj->getUsername();
echo ‘<br>Password: ‘.$userobj->getPassword();
echo ‘<br>Email: ‘.$userobj->getEmail();
echo ‘<br>Description: ‘.$userobj->getDescription();
//改变密码和Email
$userobj->setPassword(‘ok456789‘);
$userobj->setEmail(‘[email protected]‘);
//输出改变后的结果
echo ‘<br><br>Password: ‘.$userobj->getPassword();
echo ‘<br>Email: ‘.$userobj->getEmail();

?>

测试结果:

Username: 螃蟹
Password: SB123456
Email: [email protected]
Description: 螃蟹也会思考

Password: ok456789
Email: [email protected]

螃蟹觉得看起来高深的设计模式也还好懂,今天就到这里了,明天再学习新的设计模式了,继续单身的横着睡了。

螃蟹学PHP设计模式之适配器模式,布布扣,bubuko.com

时间: 2024-08-02 02:49:44

螃蟹学PHP设计模式之适配器模式的相关文章

螃蟹学PHP设计模式之建造者模式

2.建造者模式 螃蟹今天要学习建造者模式了,昨天的适配器记得还是很清楚的.对于建造者模式,螃蟹的理解是你有10部iphone手机要充电,假设充电器额定电压都是220v,但是外电压不稳定,可能是220v,也可能是240v,或是300v,这个时候怎么办,可行的方法是购置一个家用变压器,把充电器都连在变压器上,不需要直接连在外电网上,无论外电压如何变化,只需要操作变压器即可.这个比喻可能有些牵强,不过还是能够说明建造者模式的用途,就是原对象可能是可变的,包括接收的参数或是方法等,但是如果我们已经在程序

螃蟹学PHP设计模式之数据访问对象模式

3.数据访问对象模式 今天又要上班了,不过公司的事情倒不多,先花点时间回忆之前学的两个设计模式吧......好,复习完了,开始学习新的数据访问对象模式.螃蟹发现其实之前的项目基本都用上了数据访问对象模式,因为在程序中手写sql实在是效率不高且不易于维护.这就好比你有个亲戚在美国,你每个月都想送点东西给他,然后你每次都要做飞机汽车跑到他哪儿去,东西给他再风尘仆仆地回来,结果有一天你突然发现有快递这服务,你每次把东西交给快递就啥事不管了,由此感叹真方便啊.其实螃蟹也觉得数据访问对象模式真的如同快递员

一起学java设计模式--适配器模式(结构型模式)

适配器模式 现有一个接口DataOperation定义了排序方法sort(int[]) 和查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch(int[], int)方法实现了二分查找算法.现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中.绘制类图并编程实现. (要求实现

设计模式之适配器模式

适配器模式(Adapter Pattern)有时候也称包装样式或者包装.将一个类的接口转接成用户所期待的.一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类别自己的接口包裹在一个已存在的类中. Adapter Pattern有两种: 类的Adapter Pattern(继承) 对象的Adapter Pattern(委托) 下面我们用第一种来实现适配器模式: 我们首先来看看类图: 具体实现如下: Banner类: public class Banner { private Stri

设计模式之适配器模式(Adapter Pattern)

适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 1. 解决的问题 即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 2. 模式中的角色 2.1 目标接口(Target):客户所期待的接口.目标可以是具体的或抽象的类,也可以是接口. 2.2 需要适配的类(Adaptee):需要适配的类或适配者类. 2.3 适配器(Adapter):通过包装一个需要适配的对象,把

大话设计模式_适配器模式(Java代码)

适配器模式:将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 简单描述: 大话设计模式中的截图: 代码例子: AbstractPlayer类: 1 package com.longsheng.adapter; 2 3 public abstract class AbstractPlayer { 4 5 public abstract void attack(); 6 7 public abstract void defenc

Java设计模式之适配器模式(Adapter Pattern)

Adapter Pattern的作用是在不改变功能的前提下转换接口.Adapter分为两类,一类是Object Adapter, 另一类是Class Adapter.由于Class Adapter的实现需要用到多继承,而Java不支持多继承,所以这里只关注Object Adapter. 在JDK1.5之前是没有 java.util.Iterator 接口的,java.util.Enumeration 接口起着 Iterator 的作用.那么如果我们需要维护一些年代比较久远的代码,可能就会面临着没

Head First 设计模式之适配器模式与外观模式

Head First设计模式之适配器模式与外观模式 前言: 之前讲过装饰者模式,将对象包装起来并赋予新的职责,这一章我们也会将对象进行包装,只不过是让它们看起来不像自己而像是别的东西.这样就可以在设计中将类的接口转化为想要的接口,以实现同的接口,此外还将讲述另一个模式,将对象包装起来以简化接口. 1.   适配器简介 1.1 面向对象的适配器 真实世界的适配器比如位于美式插头和欧式插座之间的交流电适配器.面向对象的适配器是什么呢? 面向对象的适配器是将一个接口转化成另一个接口,以符合客户的期望.

每天一个设计模式-3 适配器模式(Adapteer)

每天一个设计模式-3 适配器模式(Adapteer) 1.现实中的情况 旧式电脑的硬盘是串口的,直接与硬盘连接,新硬盘是并口的,显然新硬盘不能直接连在电脑上,于是就有了转接线.好了,今天的学习主题出来了“适配器”. 2.联系编程 有一个电源类,一个旧的硬盘类,还有一个新硬盘类:电源类能直接适配旧硬盘类,但不能和新硬盘适配. 这时,可以添加一个适配器类,这里采用对象引用的方式实现适配器. 3.类图 模式简图: 测试时使用的类图: 4.代码 NewDiskApi: public interface