HGETALL key
header('Content-Type: text/html; charset=UTF-8'); // state 패턴 // Capsule // SOLD 있음 , SOLD_OUT 동전 없음 , Capsule 매진, Capsule 판매 ( 상태 ) // 통전 투입, 통전 반환, 손잡이 돌림, Capsule 내보냄 ( 행동 ) class CapsuleMachine { static $SOLD_OUT = 0; //매진인 상태 static $COIN_IN = 1; //동전 넣기를 기다리는 상태 static $HAS_COIN = 2; //동전이 들어있는상대 static $SOLD = 3; //손잡이를 돌리고 난 후 알맹이를 받을수 있는상태 public $_state = 0; //상태를 관리하기 위한 변수 public $_c..
* @since ${DAY} * @version 1.0 */// 상속의 문제 - 서블크래스를 만드는 방식으로 행동을 상속 받으면 그 행동은 커파일시 완전히 결정이 되고, 모든 서브 클래스에서// 똑같이 행동을 상속 받아야 한다.// 하지만 수정을 통해 객체의 행동을 확장하면 실행중에 동적으로 행동을 설정할 수 있다.// 상속을 통해 확장을 할 수도 있지만, 디자인 유연성 면에서는 별로 좋지 않다.// 기존 코드를 수정하지 않고도 행동을 확장하는 방법이 필요하다.// 구성과 위임을 통해서 실행중에 새로운 행동을 추가할 수 잇다.// 상속 대신 데코레이터 패턴을 통해서 행동을 확장 할 수 잇다.// 데코레이터 패턴에서는 구상 구성 요소를 감싸주는 데코레이터를 사용한다.// 데코레이터의 슈퍼 클래스는 자..
_observers as $observer) { $return[] = $observer->update($this->_state); } return $return; } function attach(&$observer) { if (is_object($observer)) { $class = get_class($observer); foreach ($this->_observers as $check) { if (is_a($check, $class)) { return; } } $t..
샘플 /** * == 객체 지향 원칙 == * 바뀌는 부분을 캡슐화 한다. * 상속보다는 구성을 활용한다. * - 이유는 !!! * 구현이 아닌 인터페이스에 맞쳐서 프로그래밍한다. * 서로 상호작용하는 객체 사이에는 가능하면 느슨하게 결합하는 디자인을 사용한다. * 클래스는 확장에 대해서는 열려 있지만 반면에 변경에 대해서는 닫혀있어야한다. * 추상화된 것에 의존하라. 구상 클래스에 의존하지 않도록 한다. * 친한 친구들하고만 연락한다. * 먼저 연락하지 마세요. 저희가 연락 드리겠습니다. * 어떤 클래스가 바뀌게 되는 이유는 한가지 뿐이어야 한다. * Interface Duck */ interface Duck { function quick(); function fly(); } class JDuck im..