PHP 에서 자주 사용 하 는 세 가지 디자인 모델 집합
iOS 개발 을 하 시 는 분 들 도 디자인 에 익숙 하 실 거 라 고 믿 죠?예 를 들 어 단일 디자인 모델,공장 디자인 모델,관찰자 모델,MVC 구조 디자인 모델 등 이다.
그 다음 에 우 리 는 PHP 에서 가장 자주 사용 하 는 세 가지 디자인 모델 을 배 웁 니 다.단일 디자인 모델,공장 디자인 모델 과 관찰자 디자인 모델 입 니 다.
단일 디자인 모드
단일 모드 란 프로그램 에서 가장 많은 인 스 턴 스 만 존재 하 는 것 입 니 다.만 들 면 메모리 에 계속 존재 합 니 다!
단일 디자인 모델 은 데이터 베이스 류 디자인 에 자주 사용 되 고 단일 모델 로 데이터 베 이 스 를 한 번 만 연결 하여 여러 개의 데이터 베이스 연결 을 방지 합 니 다.
하나의 사례 류 는 다음 과 같은 특징 을 가 져 야 한다.
단일 클래스 는 직접 실례 화 되 어 만 들 수 없고 클래스 자체 에 의 해 실례 화 될 수 있 습 니 다.따라서 이러한 제한 효 과 를 얻 으 려 면 구조 함 수 는 private 로 표시 하여 클래스 가 예화 되 는 것 을 방지 해 야 한다.
클래스 인 스 턴 스 를 저장 하고 인 스 턴 스 에 접근 할 수 있 는 공개 정적 인 방법 을 공개 하기 위해 서 는 개인 정적 인 구성원 변수 가 필요 합 니 다.
PHP 에 서 는 다른 사람 이 단일 인 스 턴 스 를 복제 하 는 것 을 방지 하기 위해 빈 개인
__clone()
방법 을 제공 합 니 다.단일 모드 의 예:
<?php
/**
* Singleton of Database
*/
class Database
{
// We need a static private variable to store a Database instance.
privatestatic $instance;
// Mark as private to prevent it from being instanced.
privatefunction__construct()
{
// Do nothing.
}
privatefunction__clone()
{
// Do nothing.
}
publicstatic functiongetInstance()
{
if (!(self::$instanceinstanceofself)) {
self::$instance = newself();
}
returnself::$instance;
}
}
$a =Database::getInstance();
$b =Database::getInstance();
// true
var_dump($a === $b);
공장 설계 모델공장 설계 모델 은 입력 매개 변수 가 다 르 거나 응용 프로그램 설정 에 따라 실례 화 되 고 대응 하 는 클래스 를 되 돌려 주 는 실례 를 만 드 는 데 자주 사용 된다.
예 를 들 어 사각형,원 이 모두 같은 방법 이 있다 고 가정 하면 우 리 는 기본 클래스 가 제공 하 는 API 로 인 스 턴 스 를 만 들 때 매개 변 수 를 통 해 해당 하 는 인 스 턴 스 를 자동 으로 만 듭 니 다.그들 은 모두 둘레 와 면적 을 얻 는 기능 을 가지 고 있 습 니 다.
<?php
interfaceInterfaceShape
{
functiongetArea();
functiongetCircumference();
}
/**
*
*/
class Rectangle implementsInterfaceShape
{
private $width;
private $height;
publicfunction__construct($width, $height)
{
$this->width = $width;
$this->height = $height;
}
publicfunctiongetArea()
{
return $this->width* $this->height;
}
publicfunctiongetCircumference()
{
return 2 * $this->width + 2 * $this->height;
}
}
/**
*
*/
class Circle implementsInterfaceShape
{
private $radius;
function__construct($radius)
{
$this->radius = $radius;
}
publicfunctiongetArea()
{
return M_PI * pow($this->radius, 2);
}
publicfunctiongetCircumference()
{
return 2 * M_PI * $this->radius;
}
}
/**
*
*/
class FactoryShape
{
publicstatic functioncreate()
{
switch (func_num_args()) {
case1:
return newCircle(func_get_arg(0));
case2:
return newRectangle(func_get_arg(0), func_get_arg(1));
default:
# code...
break;
}
}
}
$rect =FactoryShape::create(5, 5);
// object(Rectangle)#1 (2) { ["width":"Rectangle":private]=> int(5) ["height":"Rectangle":private]=> int(5) }
var_dump($rect);
echo "<br>";
// object(Circle)#2 (1) { ["radius":"Circle":private]=> int(4) }
$circle =FactoryShape::create(4);
var_dump($circle);
관찰자 디자인 모드관찰자 모델 은 흔히 볼 수 있 는 디자인 모델 로 적당 하 게 사용 하면 프로그램 에 큰 편 의 를 가 져 다 주 고 잘못 사용 하면 나중에 사람들 에 게 유지 하기 어 려 운 생각 을 줄 수 있다.
관찰자 모드 가 무엇 입 니까?한 대상 은 제공 방법 을 통 해 다른 대상 인 관찰자 가 자신 을 등록 할 수 있 도록 허용 한다).관찰 가능 한 대상 이 바 뀌 면 등 록 된 관찰자 에 게 메 시 지 를 보 냅 니 다.이 관찰자 들 이 이 정 보 를 사용 하여 수행 하 는 조작 은 관찰 가능 한 대상 과 무관 하 다.결 과 는 대상 이 서로 대화 할 수 있 기 때문에 원인 을 이해 할 필요 가 없다.관찰자 모델 은 일종 의 사건 시스템 으로 이 모델 은 특정한 유형 이 다른 유형의 상 태 를 관찰 할 수 있 음 을 의미한다.관찰 되 는 유형 상태 가 바 뀌 었 을 때 관찰 류 는 통 지 를 받 고 해당 하 는 동작 을 할 수 있다.관찰자 모드 는 구성 요소 간 의 긴밀 한 결합 을 피 할 수 있 도록 제공 합 니 다.아래 의 예 를 보면 너 는 곧 알 게 될 것 이다!
<?php
/*
*/
interfaceInterfaceObserver
{
functiononListen($sender, $args);
functiongetObserverName();
}
//
interfaceInterfaceObservable
{
functionaddObserver($observer);
functionremoveObserver($observer_name);
}
//
abstractclass Observer implementsInterfaceObserver
{
protected $observer_name;
functiongetObserverName()
{
return $this->observer_name;
}
functiononListen($sender, $args)
{
}
}
//
abstractclass Observable implementsInterfaceObservable
{
protected $observers = array();
publicfunctionaddObserver($observer)
{
if ($observerinstanceofInterfaceObserver)
{
$this->observers[] = $observer;
}
}
publicfunctionremoveObserver($observer_name)
{
foreach ($this->observersas $index => $observer)
{
if ($observer->getObserverName() === $observer_name)
{
array_splice($this->observers, $index, 1);
return;
}
}
}
}
//
class A extendsObservable
{
publicfunctionaddListener($listener)
{
foreach ($this->observersas $observer)
{
$observer->onListen($this, $listener);
}
}
}
//
class B extendsObserver
{
protected $observer_name = 'B';
publicfunctiononListen($sender, $args)
{
var_dump($sender);
echo "<br>";
var_dump($args);
echo "<br>";
}
}
//
class C extendsObserver
{
protected $observer_name = 'C';
publicfunctiononListen($sender, $args)
{
var_dump($sender);
echo "<br>";
var_dump($args);
echo "<br>";
}
}
$a = new A();
//
$a->addObserver(new B());
$a->addObserver(new C());
//
$a->addListener('D');
//
$a->removeObserver('B');
// :
// object(A)#1 (1) { ["observers":protected]=> array(2) { [0]=> object(B)#2 (1) { ["observer_name":protected]=> string(1) "B" } [1]=> object(C)#3 (1) { ["observer_name":protected]=> string(1) "C" } } }
// string(1) "D"
// object(A)#1 (1) { ["observers":protected]=> array(2) { [0]=> object(B)#2 (1) { ["observer_name":protected]=> string(1) "B" } [1]=> object(C)#3 (1) { ["observer_name":protected]=> string(1) "C" } } }
// string(1) "D"
작은 매듭PHP 의 세계 에 처음 들 어 왔 습 니 다.지금 은 이러한 기본 적 인 디자인 모델 만 알 고 있 습 니 다.천천히 배 워 서 응용 하 세 요!만약 글 에 잘못된 점 이 있다 면 댓 글 에서 지적 해 주 십시오.저 는 명확 한 후에 글 내용 을 수정 할 것 입 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.