php设计模式 建造者模式 与Adapter(适配器模式)

php教程设计模式 建造者模式 与Adapter(适配器模式)

适配器模式
*
* 将一个类的接口转换成客户希望的另外一个接口,使用原本不兼容的而不能在一起工作的那些类可以在一起工作

建造者模式
*
* 将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示

<?php
/**
* 适配器模式
*
* 将一个类的接口转换成客户希望的另外一个接口,使用原本不兼容的而不能在一起工作的那些类可以在一起工作
*/

// 这个是原有的类型
class OldCache
{
public function __construct()
{
echo "OldCache construct<br/>";
}

public function store($key,$value)
{
echo "OldCache store<br/>";
}

public function remove($key)
{
echo "OldCache remove<br/>";
}

public function fetch($key)
{
echo "OldCache fetch<br/>";
}
}

interface Cacheable
{
public function set($key,$value);
public function get($key);
public function del($key);
}

class OldCacheAdapter implements Cacheable
{
private $_cache = null;
public function __construct()
{
$this->_cache = new OldCache();
}

public function set($key,$value)
{
return $this->_cache->store($key,$value);
}

public function get($key)
{
return $this->_cache->fetch($key);
}

public function del($key)
{
return $this->_cache->remove($key);
}
}

$objCache = new OldCacheAdapter();
$objCache->set("test",1);
$objCache->get("test");
$objCache->del("test",1);

php设计模式 Builder(建造者模式)

 

<?php

/**
* 建造者模式
*
* 将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示
*/
class Product
{
public $_type = null;
public $_size = null;
public $_color = null;

public function setType($type)
{
echo "set product type<br/>";
$this->_type = $type;
}

public function setSize($size)
{
echo "set product size<br/>";
$this->_size = $size;
}

public function setColor($color)
{
echo "set product color<br/>";
$this->_color = $color;
}
}

$config = array(
"type"=>"shirt",
"size"=>"xl",
"color"=>"red",
);

// 没有使用bulider以前的处理
$oProduct = new Product();
$oProduct->setType($config['type']);
$oProduct->setSize($config['size']);
$oProduct->setColor($config['color']);

// 创建一个builder类
class ProductBuilder
{
var $_config = null;
var $_object = null;

public function ProductBuilder($config)
{
$this->_object = new Product();
$this->_config = $config;
}

public function build()
{
echo "--- in builder---<br/>";
$this->_object->setType($this->_config['type']);
$this->_object->setSize($this->_config['size']);
$this->_object->setColor($this->_config['color']);
}

public function getProduct()
{
return $this->_object;
}
}

$objBuilder = new ProductBuilder($config);
$objBuilder->build();
$objProduct = $objBuilder->getProduct();

时间: 2024-09-19 20:40:51

php设计模式 建造者模式 与Adapter(适配器模式)的相关文章

[Head First设计模式]山西面馆中的设计模式——建造者模式

系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 引言 将学习融入生活中,是件很happy的事情,不会感觉到累.一个感觉:很好玩!挺开心的...... 为什么会出现建造者模式? 在软件系统中,有时面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成. 这个复杂的对象的各个部分经常面临剧烈变化,但是将它们组合在一起的算法却相对稳定. 比如:建一所房子,建房子的过程基本不变

PHP设计模式——建造者模式

声明:本系列博客参考资料<大话设计模式>,作者程杰.        建造者模式也称生成器模式,核心思想是将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式.             例如:汽车,他的发动机引擎有好多品牌,轮胎也有各种材质,内饰更是千奇百怪:鸟,他的头.翅膀以及脚有各种颜色和形状,在创建这种复杂对象的时候,我们建议使用建造者模式.        类图:                建造者模式一般认为有四个角色:      1.

.NET设计模式-建造者模式(Builder Pattern)

建造者模式(Builder Pattern) --.NET设计模式系列之四 Terrylee,2005年12月17日 概述 在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定.如何应对这种变化?如何提供一种"封装机制"来隔离出"复杂对象的各个部分"的变化,从而保持系统中的"稳定构建算法"

3、Python与设计模式--建造者模式

一.快餐点餐系统(2) 今天的例子,还是上一次谈到的快餐点餐系统.只不过,今天我们从订单的角度来构造这个系统.最先还是有请上次的主角们:主餐: class Burger(): name="" price=0.0 def getPrice(self): return self.price def setPrice(self,price): self.price=price def getName(self): return self.name class cheeseBurger(Bur

设计模式之禅之设计模式-建造者模式

一:建造者模式的定义        --->建造者模式(Builder Pattern)也叫做生成器模式,其定义如下:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示        ● Product产品类                通常是实现了模板方法模式,也就是有模板方法和基本方法,这个参考模板方法模式.例子中的BenzModel和BMWModel就属于产品类.        ● Builder抽象建造者                规范产品的组建,一般是由子类

设计模式学习笔记(二)—-Adapter适配器模式

GOF<设计模式>一书对Adapter模式是这样描述的: 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作. 这段话大致是说:我们需要一种方式,为一个功能正确但接口不合的对象创建一个新接口.例如,客户给我们如下需求: 1)为都有"显示"(display)行为的点.线.正方形分别创建类. 2)客户对象不必知道自己到底拥有点.线.还是正方形.它只需知道拥有这些形状中的一个. 也就是说,我们要用一个更高层次的概念将这

设计模式-建造者模式+模板模式=自定义用户需求

本博原创禁止转载.拷贝.拍照等一切商业目地,否则将保留法律权利! ----- public abstract class CarModel { //这个参数是各个基本方法执行的顺序private ArrayList<String> sequence = new ArrayList<String>(); /** 模型是启动开始跑了*/protected abstract void start(); //能发动,那还要能停下来,那才是真本事protected abstract void

设计模式-建造者模式给用户自由

public abstract class CarModel { //这个参数是各个基本方法执行的顺序private ArrayList<String> sequence = new ArrayList<String>(); /** 模型是启动开始跑了*/protected abstract void start(); //能发动,那还要能停下来,那才是真本事protected abstract void stop(); //喇叭会出声音,是滴滴叫,还是哔哔叫protected a

设计模式的C++实现之建造者模式

解决的问题: 我创建的这个对象比较复杂,且该对象里面的成员函数用不同的实现来表示不同的实例,换句话说 就是同样的对象构建过程可以有不同的表示.比如我那天去吃过桥米线,他们有不同的套餐,套餐里包含的种类是一样的, 都有一碗米线,一份凉菜,一杯饮料.但是不同的套餐里这3样又都不是全部一样的.此时我们就可以用建造者模式. 类图结构: 1.建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造.一般而言,此接口独立于应 用程序的商业逻辑.模式中直接创建产品对象的是具体建造者(