원본링크: http://www.cnblogs.com/siqi/archive/2012/09/09/2667562.html
1. >
싱글턴 모드는 이름에서 알 수 있듯이 인스턴스가 하나만 있다는 의미입니다.
싱글턴 패턴에는 세 가지 주요 사항이 있습니다.
/**
* 디자인 패턴의 싱글톤 패턴
* $_instance는 정적 프라이빗 변수로 선언해야 합니다.
* 생성자는 프라이빗으로 선언해야 합니다. 방지 외부 프로그램의 새 클래스는 싱글톤 모드의 의미를 잃습니다.
* getInstance() 메소드는 공개로 설정되어야 하며, 이 메소드는 인스턴스에 대한 참조를 반환하기 위해 호출되어야 합니다.
* :: 운영자는 액세스만 가능합니다. 정적 변수 및 정적 변수 기능
* 새로운 객체는 메모리를 소비합니다
* 사용 시나리오: 가장 일반적으로 사용되는 곳은 데이터베이스 연결입니다.
* 싱글톤 모드를 사용하여 객체를 생성한 후에는 해당 객체를 다른 많은 객체에서 사용할 수 있습니다.
*/
class man
{
//이 속성에 인스턴스를 저장합니다 private static $_instance;
//생성자는 직접 생성을 방지하기 위해 private으로 선언됩니다. 개체 private function __construct()
{
echo '인스턴스화되었습니다! ';
}
//단일 인스턴스 방법 공개 정적 함수 get_instance()
{
var_dump(isset(self::$_instance));
if (!설정(self::$_instance))
();
} 반환 본인::$ _instance
;
} //사용자가 객체 인스턴스를 복사하지 못하도록 방지
private
function __clone() { } 함수 테스트()
{
에코("test"); }}
// 생성자가 private으로 선언되었기 때문에 이 작성 방법은 잘못됩니다.
//$test = new man;
// 다음은 예제 클래스의 싱글톤 개체를 가져옵니다. $ 테스트
= man::get_instance();
$test = man::get_instance();$test
->test ();
// 객체를 복사하면 E_USER_ERROR가 발생합니다.
//$test_clone = clone $test;
2. 간단한 팩토리 패턴
①추상 기본 클래스: 추상 메소드를 정의합니다. 사용할 클래스
을 서브클래스에 구현 ② 추상 베이스 클래스에서 상속받은 서브클래스 : 베이스 클래스
객체 지향 상속 기능을 사용하면 '거듭제곱', '제곱근', '대수', '삼각 함수', '통계'와 같은 원래 프로그램을 쉽게 확장할 수 있습니다. 등을 사용하여 불필요한 코드를 로드하지 않도록 합니다. 지금 나머지 클래스를 추가해야 한다면 매우 간단합니다. 다른 클래스만 작성하면 됩니다(이 클래스는 가상 기본 클래스를 상속합니다). 해당 기능(예: 전력 계산)이 클래스에서 완료되고 결합 정도가 크게 감소되어 향후 유지 관리 및 확장이 용이합니다
/** /** * 주로 객체를 생성하는 데 사용되는 엔지니어링 클래스
/**
*
* 추상 클래스를 정의하고 하위 클래스가 이를 상속 및 구현하도록 합니다.
*
*/
🎜>추상 공개 함수
getValue($num1,$num2);//하위 클래스가 이 기능 함수를 구현해야 한다는 것이 강력히 요구됩니다 } 🎜 >*/ class OperationAdd 확장 작업 { 공개
함수
getValue(
$num1,$num2){
반환 $num1+
$num2; } } > 공개
함수 getValue($num1,$num2){ 🎜>return
$num1- $num2; * 곱셈 클래스
*/
class OperationMul 확장
연산 {
공개 함수
getValue($num1,$num2){
🎜>; } } class OperationDiv 확장 Operation { 🎜>){ 🎜>
예외 잡아 (예외 $e){ >에코
"오류 메시지:".
$e
->getMessage(); } } }
* 나머지(나머지) 구하기
*
*/
classOperationRem확장Operation {
public function getValue($num1,$num2> 🎜>
아직 해결되지 않은 문제가 있는데, 사용자가 입력한 연산자에 따라 프로그램이 해당 객체를 어떻게 인스턴스화하게 하느냐는 것입니다. 해결책: 별도의 클래스를 사용하여 인스턴스화 프로세스를 구현합니다. 이 클래스는 팩토리입니다.
class공장{ $operate
){ switch ($operate
){
사례
'+': >반환 신규 OperationAdd();
> 신규 OperationSub ();
> ~ eObj( '/'); $result=$test->getValue(23,0); echo
$result ;
이 모드에 대한 기타 참고 사항:
공장 모드:
운송을 예로 들어보겠습니다. 운송과 운송을 모두 맞춤 설정할 수 있도록 요청하세요. 도구 프로세스 제작
1> 맞춤형 운송
1. 도구 전달 방법(시작, 실행, 중지)을 포함하는 인터페이스 정의
2. 비행기, 자동차 등에 구현하도록 합니다
2> Customization Factory(위와 유사)
1. 다음을 포함하는 인터페이스를 정의합니다. 작업 도구 제작 방법(시작, 실행, 정지)
2. 항공기와 자동차를 각각 제작하는 팩토리 클래스를 작성하여 이 인터페이스를 상속하고 구현합니다
원문 주소 : http://bbs.phpchina.com/thread-242243-1-1.html
3. 관찰자 패턴
관찰자 패턴 동작 패턴은 객체 간의 일대다 종속 관계를 정의하여 객체의 상태가 변경되면 해당 객체에 의존하는 모든 객체에 알림을 보내고 자동으로 새로 고쳐지도록 하는 것입니다. 관찰 대상과 관찰 대상을 완벽하게 분리합니다. 주체에 관심이 있는 종속성(관찰자) 목록은 별도의 개체(주체)에서 유지 관리될 수 있습니다. 모든 관찰자가 공통 관찰자 인터페이스를 개별적으로 구현하여 주체 개체와 종속 개체 간의 직접적인 종속성을 제거하도록 합니다. (어쨌든 이해가 안됨)
spl(표준 php 라이브러리) 사용
class MyObserver1 구현 SplObserver {
참고 원문: http://www.php.net/manual/zh/class. splsubject .php
4. 전략 모드
이 모드에서는 알고리즘이 의 복잡한 클래스이므로 을 으로 편리하게 바꿀 수 있습니다. 예를 들어, 검색 엔진에서 페이지 순위를 매기는 방식을 변경하려면 전략 모드를 선택하는 것이 좋습니다. 검색 엔진의 구성요소에 대해 생각해 보세요. ——한 부분은 페이지를 순회하고, 한 부분은 각 페이지를 정렬하고, 다른 부분은 정렬 결과에 따라 정렬합니다. 복잡한 예에서 이러한 부분은 모두 동일한 클래스에 있습니다. 전략 패턴을 사용하면 정렬 부분을 다른 클래스에 넣어 나머지 검색 엔진 코드에 영향을 주지 않고 페이지 정렬 방식을 변경할 수 있습니다.
더 간단한 예로, 아래는 세트를 기반으로 사용자 목록을 제공하는 사용자 목록 클래스를 보여줍니다. 사용자 집합을 찾기 위한 플러그 앤 플레이 전략 방법
//인터페이스 정의인터페이스 IStrategy {