PHP 디자인 모델 깊이 분석
하나의 클래스,하나의 대상 만 존재 할 수 있 습 니 다.
<?php
class test{
protected function __construct(){
}
public static function getInstance(){
$_test = new test();
return $_test;
}
}
$test = test::getInstance();
var_dump($test);
?>
2.공장 모델공장 모델 은 말 그대로 공장 처럼 원자 재 를 공장 에 넣 고 완제품 으로 나 왔 습 니 다.공장 에서 무엇 을 했 는 지 알 필요 가 없습니다.공장 모델 은 주로 결합 을 푸 는 데 사 용 됩 니 다.
대상 의 생 성과 사용 과정 을 분리 합 니 다.예 를 들 어 ClassA 가 ClassB 를 호출 하면 ClassA 는 ClassB 만 호출 하 는 방법 입 니 다.
실례 화 된 ClassB 는 공장 내 에서 이 루어 진다.이렇게 하면 코드 의 중복 사용 을 줄 일 뿐만 아니 라 ClassB 에 대한 후기 유지보수 도 편리 하 다.
만약 ClassB 실례 화 과정 이 매우 복잡 하 다 면 간단 한 공장 모델 을 사용 하면 외부 에서 복잡 한 실례 화 에 관심 을 가지 지 않 고 ClassB 를 호출 하 는 방법 만 사용 하면 되 고 오 류 를 줄 일 수 있다.
interface mysql{
public function connect();
}
class mysqli2 implements mysql{
public function connect(){
echo 'mysqli';
}
}
class pdo2 implements mysql{
public function connect(){
echo 'pdo';
}
}
class mysqlFactory{
static public function factory($class_name){
return new $class_name();
}
}
$obj = mysqlFactory::factory('pdo2');
$obj->connect();
3.등록 모드등록 모드,전역 공유 와 교환 대상 해결.전역 적 으로 사용 할 수 있 는 그룹 에 걸 려 있 는 대상 을 만 들 었 습 니 다.
사용 이 필요 할 때 이 배열 에서 직접 가 져 오 면 됩 니 다.대상 을 전역 트 리 에 등록 합 니 다.어디 든 직접 방문 하 다.
<?php
class Register
{
protected static $objects;
function set($alias,$object)//
{
self::$objects[$alias]=$object;//
}
static function get($name){
return self::$objects[$name];//
}
function _unset($alias)
{
unset(self::$objects[$alias]);// 。
}
}
\Auto\Register::set('single',$single);
$single = \Auto\Register::get('single');
var_dump($single);
4.어댑터 모드하나의 종류의 인 터 페 이 스 를 고객 이 원 하 는 다른 인터페이스 로 바꾸다.
//
interface Aims
{
public function newMethod1();
public function newMethod2();
}
// (Adaptee)
Class Man
{
public function oldMethod1()
{
echo 'man';
}
public function oldMethod2()
{
echo ' ';
}
}
// (Adaptee)
Class Woman
{
public function oldMethod1()
{
echo 'woman';
}
public function oldMethod2()
{
echo ' ';
}
}
// ,
Class Adapters implements Aims
{
private $adaptee;
public function __construct($adaptee)
{
$this->adaptee = $adaptee;
}
public function newMethod1()
{
//
echo 'sex :';
$this->adaptee->oldMethod1();
}
public function newMethod2()
{
echo 'sex name :';
$this->adaptee->oldMethod2();
}
}
$adapter1 = new Adapters(new Man);
$adapter1->newMethod1();
$adapter2 = new Adapters(new Woman);
$adapter2->newMethod2();
5.전략 모드이것 은 한 남자 와 여자 의 문제 로 특정한 행위 와 알고리즘 을 분류 하여 특정한 문맥 환경 에 적응 하도록 한다.
UserStrategy.php
<?php
/*
* , 。
*/
interface UserStrategy
{
function showAd();
function showCategory();
}
FemaleUser.php
<?php
class FemaleUser implements UserStrategy
{
function showAd(){
echo "2016 ";
}
function showCategory(){
echo " ";
}
}
MaleUser.php
<?php
class MaleUser implements UserStrategy
{
function showAd(){
echo "IPhone6s";
}
function showCategory(){
echo " ";
}
}
Page.php//
<?php
require_once 'Loader.php';
class Page
{
protected $strategy;
function index(){
echo "AD";
$this->strategy->showAd();
echo "<br>";
echo "Category";
$this->strategy->showCategory();
echo "<br>";
}
function setStrategy(UserStrategy $strategy){
$this->strategy=$strategy;
}
}
$page = new Page();
if(isset($_GET['male'])){
$strategy = new MaleUser();
}else {
$strategy = new FemaleUser();
}
$page->setStrategy($strategy);
$page->index();
6.원형 모드클 라 이언 트
7.관찰자 모드
과정 을 대상 으로 하 는 측면 에서 볼 때 먼저 관찰자 가 주제 에 등록 하고 등록 한 후에 주 제 는 관찰자 에 게 해당 하 는 조작 을 하 라 고 알 리 면 모든 일이 끝난다.
/**
*
* Class EventGenerator
*/
abstract class EventGenerator
{
private $ObServers = [];
//
public function add(ObServer $ObServer)
{
$this->ObServers[] = $ObServer;
}
//
public function notify()
{
foreach ($this->ObServers as $ObServer) {
$ObServer->update();
}
}
}
/**
*
* Interface ObServer
*/
interface ObServer
{
public function update($event_info = null);
}
/**
* 1
*/
class ObServer1 implements ObServer
{
public function update($event_info = null)
{
echo " 1 !
";
}
}
/**
* 1
*/
class ObServer2 implements ObServer
{
public function update($event_info = null)
{
echo " 2 !
";
}
}
/**
*
* Class Event
*/
class Event extends EventGenerator
{
/**
*
*/
public function trigger()
{
//
$this->notify();
}
}
//
$event = new Event();
//
$event->add(new ObServer1());
$event->add(new ObServer2());
//
$event->trigger();
이상 은 PHP 디자인 모델 의 상세 한 내용 을 깊이 분석 하 는 것 입 니 다.더 많은 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에 따라 라이센스가 부여됩니다.