<?php
/**
* Facade外观模式
*/
/**
如果增加一个新的外观类NewEncryptFacade来与FileReader类、
FileWriter类以及新增加的NewCipherMachine类进行交互,
虽然原有系统类库无须做任何修改,但是因为客户端代码中原来针对EncryptFacade类进行编程,
现在需要改为NewEncryptFacade类,因此需要修改客户端源代码。
如何在不修改客户端代码的前提下使用新的外观类呢?
解决方法之一是:引入一个抽象外观类,客户端针对抽象外观类编程,而在运行时再确定具体外观类
*
*
*
*
*/
class FileReader
{
public function Read($fileNameSrc)
{
print("读取文件,获取明文:");
}
}
//CipherMachine:数据加密类,充当子系统类。
class CipherMachine
{
public function Encrypt($plainText)
{
print("数据加密,将明文转换为密文:");
}
}
// FileWriter:文件保存类,充当子系统类。
class FileWriter
{
public function Write($encryptStr, $fileNameDes)
{
print("保存密文,写入文件。");
}
}
//EncryptFacade:加密外观类,充当外观类。
class EncryptFacade
{
//维持对其他对象的引用
private $reader;
private $cipher;
private $writer;
public function __construct()
{
$reader = new FileReader();
$cipher = new CipherMachine();
$writer = new FileWriter();
}
//调用其他对象的业务方法
public function FileEncrypt($fileNameSrc, $fileNameDes)
{
$plainStr = $this->reader->Read($fileNameSrc);
$encryptStr = $this->cipher->Encrypt($plainStr);
$this->writer->Write($encryptStr, $fileNameDes);
}
}
评论