Qua các series tự học về Design Pattern, Hôm nay cafedevn chia sẻ cho ace ví dụ và code cụ thể về cách sử dụng Facade design pattern với ngôn ngữ lập trình PHP. Nhằm giúp ace hiểu rõ cách sử Pattern này với PHP một cách nhanh nhất và áp dụng nó vào thực tế.
Nội dung chính
Mô tả code
Trong ví dụ này, lớp CaseReverseFacade sẽ gọi một hệ thống con để đảo ngược trường hợp của một chuỗi được truyền từ lớp Sách. Hệ thống con được điều khiển bởi hàm reverseCase trong CaseReverseFacade, hàm này lần lượt gọi các hàm trong các lớp ArrayCaseReverse và ArrayStringFunctions. Như đã viết, CaseReverseFacade có thể đảo ngược trường hợp của bất kỳ chuỗi nào, nhưng nó có thể dễ dàng được thay đổi để chỉ đảo ngược một phần tử của một lớp duy nhất.
Trong ví dụ của tôi, tôi làm cho tất cả các phần tử của Facade và hệ thống con ở trạng thái tĩnh. Điều này cũng có thể dễ dàng được thay đổi.
Phần code
<?php
class Book {
private $author;
private $title;
function __construct($title_in, $author_in) {
$this->author = $author_in;
$this->title = $title_in;
}
function getAuthor() {
return $this->author;
}
function getTitle() {
return $this->title;
}
function getAuthorAndTitle() {
return $this->getTitle().' by '.$this->getAuthor();
}
}
class CaseReverseFacade {
public static function reverseStringCase($stringIn) {
$arrayFromString = ArrayStringFunctions::stringToArray($stringIn);
$reversedCaseArray = ArrayCaseReverse::reverseCase($arrayFromString);
$reversedCaseString = ArrayStringFunctions::arrayToString($reversedCaseArray);
return $reversedCaseString;
}
}
class ArrayCaseReverse {
private static $uppercase_array =
array('A', 'B', 'C', 'D', 'E', 'F',
'G', 'H', 'I', 'J', 'K', 'L',
'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z');
private static $lowercase_array =
array('a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l',
'm', 'n', 'o', 'p', 'q', 'r',
's', 't', 'u', 'v', 'w', 'x',
'y', 'z');
public static function reverseCase($arrayIn) {
$array_out = array();
for ($x = 0; $x < count($arrayIn); $x++) {
if (in_array($arrayIn[$x], self::$uppercase_array)) {
$key = array_search($arrayIn[$x], self::$uppercase_array);
$array_out[$x] = self::$lowercase_array[$key];
} elseif (in_array($arrayIn[$x], self::$lowercase_array)) {
$key = array_search($arrayIn[$x], self::$lowercase_array);
$array_out[$x] = self::$uppercase_array[$key];
} else {
$array_out[$x] = $arrayIn[$x];
}
}
return $array_out;
}
}
class ArrayStringFunctions {
public static function arrayToString($arrayIn) {
$string_out = NULL;
foreach ($arrayIn as $oneChar) {
$string_out .= $oneChar;
}
return $string_out;
}
public static function stringToArray($stringIn) {
return str_split($stringIn);
}
}
witeln('BEGIN TESTING FACADE PATTERN');
witeln('');
$book = new Book('Design Patterns', 'Gamma, Helm, Johnson, and Vlissides');
witeln('Original book title: '.$book->getTitle());
witeln('');
$bookTitleReversed = CaseReverseFacade::reverseStringCase($book->getTitle());
writeln('Reversed book title: '.$bookTitleReversed);
witeln('');
writeln('END TESTING FACADE PATTERN');
function writeln($line_in) {
echo $line_in."<br/>";
}
?>
Kết quả:
BEGIN TESTING FACADE PATTERN
Original book title: Design Patterns
Reversed book title: dESIGNpATTERNS
END TESTING FACADE PATTERN
Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.
Tài liệu từ cafedev:
- Full series tự học Design Pattern từ cơ bản tới nâng cao tại đây nha.
- Các nguồn kiến thức MIỄN PHÍ VÔ GIÁ từ cafedev tại đây
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:
Chào thân ái và quyết thắng!