PHP 의"단순 공장 모드"인 스 턴 스 코드 설명

4900 단어 공장 모드
간단 한 공장 모델:① 추상 적 인 기류:유형 에서 추상 적 인 방법 을 정의 하고 자 류 에서 ② 추상 적 인 기 류 를 계승 하 는 자 류:기 류 를 실현 하 는 추상 적 인 방법 ③ 공장 류:사례 화 대상 으로 글 을 보고 이 그림 을 돌 이 켜 보면 효과 가 비교적 좋다.
패 키 징 방식 을 사용 합 니 다
 
<?php
class Calc{
/**
*
*
* @param int|float $num1
* @param int|float $num2
* @param string $operator
* @return int|float
*/
public function calculate($num1,$num2,$operator){
try {
$result=0;
switch ($operator){
case '+':
$result= $num1+$num2;
break;
case '-':
$result= $num1-$num2;
break;
case '*':
$result= $num1*$num2;
break;
case '/':
if ($num2==0) {
throw new Exception(" 0");
}
$result= $num1/$num2;
break;
return $result;
}
}catch (Exception $e){
echo " :".$e->getMessage();
}
}
}
$test=new Calc();
// echo $test->calculate(2,3,'+');// :5
echo $test->calculate(5,0,'/');// : : 0
?>
장점:상기 코드 는 대상 을 대상 으로 하 는 패 키 징 특성 을 사 용 했 습 니 다.include 라 는 종류 만 있 으 면 다른 페이지 는 단점 을 마음대로 사용 할 수 있 습 니 다.유연 한 확장 과 유지 가 불가능 합 니 다.예 를 들 어'잉여'연산 을 추가 하려 면 switch 구문 블록 에 분기 문 구 를 추가 해 야 합 니 다.코드 는 다음 과 같이 변경 하여 분기 문 구 를 추가 해 야 합 니 다
 
<?php
class Calc{
public function calculate($num1,$num2,$operator){
try {
$result=0;
switch ($operator){
//...... ......
case '%':
$result= $num1%$num2;
break;
//...... ......
}
}catch (Exception $e){
echo " :".$e->getMessage();
}
}
}
?>
코드 분석:상기 방법 으로 계산기 에 새로운 기능 연산 을 추가 하 는 데 다음 과 같은 몇 가지 단점 이 있 습 니 다.① 기 존의 코드 블록 을 변경 해 야 합 니 다.'새로운 기능 추가'를 위해 기 존 코드 를 변경 할 때 기 존의 코드 를 잘못 고 쳤 을 수 있 습 니 다 ② 추가 할 기능 이 많 으 면예 를 들 어'곱셈','처방','대수','삼각함수','통계'또는 프로그래머 전용 계산 기능 을 추가 합 니 다.예 를 들 어 And,Or,Not,Xor 등 은 switch 구문 에 N 개의 분기 문 구 를 추가 해 야 합 니 다.상상 해 보 세 요.하나의 계산 기능 의 함수 가 만약 에 20,30 개의 case 분기 문 구 를 가지 고 있다 면 코드 는 한 화면 을 초과 할 것 입 니 다.코드 의 가 독성 을 크게 떨 어 뜨 릴 뿐만 아니 라 관건 은 작은 기능 을 추가 하기 위해 다른 관련 이 없 는 것 도 해석 에 참여 하 게 해 야 합 니 다.이 로 인해 프로그램의 집행 효율 이 크게 떨 어 지고 해결 경 로 를 크게 낮 춘 다.OOP 의 계승 과 다 중 사상 단순 공장 모델 의 초보적인 실현
 
<?php
/**
*
* ,
*/
abstract class Operation{
//
abstract public function getValue($num1,$num2);//
}
/**
*
*/
class OperationAdd extends Operation {
public function getValue($num1,$num2){
return $num1+$num2;
}
}
/**
*
*/
class OperationSub extends Operation {
public function getValue($num1,$num2){
return $num1-$num2;
}
}
/**
*
*/
class OperationMul extends Operation {
public function getValue($num1,$num2){
return $num1*$num2;
}
}
/**
*
*/
class OperationDiv extends Operation {
public function getValue($num1,$num2){
try {
if ($num2==0){
throw new Exception(" 0");
}else {
return $num1/$num2;
}
}catch (Exception $e){
echo " :".$e->getMessage();
}
}
}
?>
여 기 는 대상 을 대상 으로 하 는 계승 특성 을 사용 했다.먼저 가상 기 류 를 성명 하고 기 류 에서 고정자 류 가 반드시 실현 해 야 하 는 방법(getValue()분석 을 말한다.대상 을 대상 으로 하 는 계승 특성 을 사용 하여우 리 는 기 존의 프로그램 을 쉽게 확장 할 수 있다.예 를 들 어'곱셈','처방','대수','삼각함수','통계'등 이다
 
<?php
/**
* (remainder)
*
*/
class OperationRem extends Operation {
public function getValue($num1,$num2){
return $num1%$num12;
}
}
?>
우 리 는 하나의 클래스(이러한 계승 가상 기본 클래스)를 따로 써 야 합 니 다.클래스 에서 해당 하 는 기능(예 를 들 어 곱셈 의 연산)을 완성 하고 결합 도 를 크게 낮 추 며 향후 의 유지 와 확장 에 편리 합 니 다.현재 해결 되 지 않 은 문제 가 있 습 니 다.바로 프로그램 이 사용자 가 입력 한 조작 부호 에 따라 해당 하 는 대상 을 예화 하 는 방법 입 니까?해결 방법:하나의 단독 클래스 를 사용 하여 실례 화 를 실현 하 는 과정 입 니 다.이 클래스 는 바로 공장 코드 입 니 다
 
<?php
/**
* ,
* : ,
*
*/
class Factory{
public static function createObj($operate){
switch ($operate){
case '+':
return new OperationAdd();
break;
case '-':
return new OperationSub();
break;
case '*':
return new OperationSub();
break;
case '/':
return new OperationDiv();
break;
}
}
}
$test=Factory::createObj('/');
$result=$test->getValue(23,0);
echo $result;
?>
오리지널 글 입 니 다.전재 할 때 출처 를 밝 혀 주 십시오.http://www.cnblogs.com/hongfei/

좋은 웹페이지 즐겨찾기