> 백엔드 개발 > PHP 튜토리얼 > 다단계 캐시 구현---책임 체인 모델

다단계 캐시 구현---책임 체인 모델

WBOY
풀어 주다: 2016-07-25 09:06:21
원래의
1133명이 탐색했습니다.
다단계 캐싱 책임 체인 모델.
* 클라이언트는 이를 핸들러에 제출하고, 핸들러는 작업을 처리할 수 있는 책임 체인에서 함수를 찾아 이를 처리합니다. 다음과 같이 요약할 수 있습니다. 일련의 클래스를 사용하여 요청 처리를 시도합니다. 이들 클래스 사이에는 느슨한 결합이 있습니다. 유일한 공통점은 요청이 들어오면 클래스 A가 이를 먼저 처리한다는 것입니다. 처리를 위해 클래스 B. 처리되지 않으면 처리를 위해 클래스 C로 전달됩니다.
  1. /**
  2. * 책임 패턴 체인, 그 목적은 메소드 호출과 같은 요청을 처리하기 위해 객체 체인을 구성하는 것입니다.
  3. *
  4. * 책임 사슬의 가장 유명한 예: 다중 레벨 캐싱.
  5. * 클라이언트는 이를 핸들러에 제출하고, 핸들러는 작업을 처리할 수 있는 함수를 찾아서 처리합니다.
  6. * 다음과 같이 요약할 수 있습니다. 요청을 처리하며, 이들 클래스 사이에는 느슨한 결합이 있습니다.
  7. * 유일한 공통점은 요청이 오면 클래스 A가 먼저 처리한다는 것입니다. 처리되지 않으면
  8. * 처리를 위해 Class B로 전달됩니다. 그렇지 않은 경우 Class B로 처리됩니다. 처리를 위해 Class C로 전달되어 체인처럼 전달됩니다.
  9. */
  10. /**
  11. * 핸들러 추상화.
  12. * ChainOfResponsibility의 일부가 되고 싶은 개체는 이 인터페이스를 직접 구현하거나
  13. * AbstractHandler의 상속을 통해 구현해야 합니다.
  14. * 책임 체인의 일부는 직접 구현해야 합니다. 이 인터페이스를 구현하거나
  15. * 추상 처리 클래스를 상속합니다
  16. */
  17. 인터페이스 KeyValueStore{
  18. /**
  19. * 값을 얻습니다.
  20. * @param string $key
  21. * @return 혼합
  22. */
  23. 공용 함수 get($key);
  24. }
  25. /**
  26. * ConcreteHandler가
  27. * 캐싱에 관심이 없거나 검색 상속을 방해하는 기본 무작동 구현입니다.
  28. * 요청을 받고 이를 만족시키려고 시도하며 실패하면 다음 핸들러에 위임합니다.
  29. */
  30. 추상 클래스 AbstractKeyValueStore가 KeyValueStore를 구현합니다.{
  31. protected $_nextHandler;
  32. 공개 함수 get($key){
  33. return $this->_nextHandler->get($key);
  34. }
  35. }
  36. /**
  37. * 이상적으로는 체인의 마지막 ConcreteHandler입니다.
  38. * 체인에 삽입하면 호출되는 마지막 노드가 됩니다.
  39. * 이상적으로는 책임 체인의 마지막 구체적인 핸들러 클래스입니다. 체인에 추가된 은 마지막으로 호출되는 노드가 됩니다.
  40. */
  41. SlowStore 클래스는 KeyValueStore를 구현합니다.{
  42. /**
  43. * 데이터베이스나 플랫 파일 등 다소 느린 저장소일 수 있습니다.
  44. */
  45. protected $_values;
  46. 공개 함수 __construct(array $values ​​= array()){
  47. $this->_values ​​= $values;
  48. }
  49. 공개 함수 get($key){
  50. return $this->_values[$key];
  51. }
  52. }
  53. /**
  54. * 자체 캐시에서 키를 찾아 처리하는 ConcreteHandler
  55. * 캐시 누락 시 다음 핸들러로 전달
  56. */
  57. InMemoryKeyValueStore 클래스는 KeyValueStore를 구현합니다.{
  58. protected $_nextHandler;
  59. protected $_cached = array();
  60. 공용 함수 __construct(KeyValueStore $nextHandler){
  61. $this->_nextHandler = $nextHandler;
  62. }
  63. 보호 함수 _load($key){
  64. if (!isset($this->_cached[$key])) {
  65. $ this->_cached[$key] = $this->_nextHandler->get($key);
  66. }
  67. }
  68. 공개 함수 get($key){
  69. $this- >_load($key);
  70. return $this->_cached[$key];
  71. }
  72. }
  73. /**
  74. * 요청을 시도하지 않고 요청을 위임하는 ConcreteHandler
  75. * 전혀 이해합니다. HTML을 생성하는 메서드를 정의하거나
  76. * 유사한 사용자 인터페이스 문제를 해결하여 자체적으로 전문화할 수 있기 때문에 사용자 인터페이스
  77. *에서 사용하는 것이 더 쉬울 수 있습니다.
  78. * 일부 클라이언트는 이 개체를 개체로만 봅니다. KeyValueStore
  79. *의 인스턴스이며 요청이 어떻게 충족되는지 신경 쓰지 않는 반면, 다른
  80. *은 이를 전체적으로 사용할 수 있습니다(클래스 기반 어댑터와 유사).
  81. * 어떤 클라이언트도 체인이 의 핸들러가 존재합니다.
  82. * 不用关心调用的具体实现的외부具体具体处理程序;背后是责任链。
  83. */
  84. 클래스 FrontEnd는 AbstractKeyValueStore를 확장합니다.{
  85. 공용 함수 __construct(KeyValueStore $nextHandler){
  86. $this->_nextHandler = $nextHandler;
  87. }
  88. 공용 함수 getEscaped($ key){
  89. return htmlentities($this->get($key), ENT_NOQUOTES, 'UTF-8');
  90. }
  91. }
  92. // 클라이언트 코드
  93. $store = new SlowStore(
  94. array(
  95. 'pd' => '필립 K. 딕',
  96. 'ia' => '아이작 아시모프',
  97. 'ac' => '아서 C . Clarke',
  98. 'hh' => 'Helmut Hei.enbttel'
  99. )
  100. );
  101. // 개발 중에는 $store를 FrontEnd에 직접 전달합니다
  102. $ 캐시 = 새로운 InMemoryKeyValueStore($store);
  103. $frontEnd = 새로운 FrontEnd($cache);
  104. echo $frontEnd->get('ia'). "n";
  105. echo $frontEnd->getEscaped('hh'). "n";
  106. /**
  107. * 예상: ...
  108. * Isaac Asimov
  109. * Helmut Hei.enbttel
  110. *
  111. * 참가자:
  112. ◆클라이언트: 핸들러( Handler)가 요청 제출 ;
  113. ◆Handler(핸들러) abstract: 요청을 받고 어떤 방식으로든 만족시킵니다.
  114. ◆ConcreteHandlers(콘크리트 핸들러): 요청을 받고 만족시키려고 시도합니다. 실패하면 다음 핸들러에 위임합니다. .
  115. */
复代码


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿