PHP中“简单工厂模式”实例代码讲解_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语句块中添加一个分支语句,代码需要做如下改动
添加分支语句
复制代码 代码如下:
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个分支语句。想象下,一个计算功能的函数如果有二三十个case分支语句,代码将超过一屏,不仅令代码的可读性大大降低,关键是,为了添加小功能,还得让其余不相关都参与解释,这令程序的执行效率大大降低
解决途径:采用OOP的继承和多态思想
简单工厂模式的初步实现
复制代码 代码如下:
/**
* 操作类
* 因为包含有抽象方法,所以类必须声明为抽象类
*/
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())
分析:通过采用面向对象的继承特性,我们可以很容易就能对原有程序进行扩展,比如:‘乘方',‘开方',‘对数',‘三角函数',‘统计'等等。
复制代码 代码如下:
/**
* 求余类(remainder)
*
*/
class OperationRem extends Operation {
public function getValue($num1,$num2){
return $num1%$num12;
}
}
?>
我们只需要另外写一个类(该类继承虚拟基类),在类中完成相应的功能(比如:求乘方的运算),而且大大的降低了耦合度,方便日后的维护及扩展
现在还有一个问题未解决,就是如何让程序根据用户输入的操作符实例化相应的对象呢?
解决办法:使用一个单独的类来实现实例化的过程,这个类就是工厂
代码如下:
复制代码 代码如下:
/**
* 工程类,主要用来创建对象
* 功能:根据输入的运算符号,工厂就能实例化出合适的对象
*
*/
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/

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java 팩토리 패턴의 이점: 1. 코드 재사용성 향상 3. 객체 생성 프로세스 단순화 5. 더 나은 성능 제공 8. 국제화를 지원합니다. 9. 개방형 및 폐쇄형 원칙을 장려합니다. 10. 더 나은 확장성을 제공합니다. 세부 소개: 1. 시스템의 결합을 줄입니다. 팩토리 패턴은 객체 생성 프로세스를 팩토리 클래스로 중앙 집중화하여 시스템의 결합을 줄입니다. 2. 코드의 재사용성을 향상합니다.

팩토리 패턴은 객체 생성 프로세스를 분리하고 팩토리 클래스에 캡슐화하여 객체를 구체적인 클래스와 분리하는 데 사용됩니다. Java 프레임워크에서 팩토리 패턴은 다음과 같은 용도로 사용됩니다. 복잡한 객체(예: Spring의 Bean) 생성 객체 격리 제공, 테스트 가능성 및 유지 관리 용이성 향상 확장 지원, 새 팩토리 클래스를 추가하여 새로운 객체 유형에 대한 지원 증가

팩토리 패턴 Go에서 팩토리 패턴을 사용하면 구체적인 클래스를 지정하지 않고도 객체를 생성할 수 있습니다. 객체를 나타내는 인터페이스(예: Shape)를 정의합니다. 이 인터페이스를 구현하는 구체적인 유형(예: Circle 및 Rectangle)을 만듭니다. 지정된 유형(예: ShapeFactory)의 객체를 생성하려면 팩토리 클래스를 생성합니다. 팩토리 클래스를 사용하여 클라이언트 코드에서 개체를 만듭니다. 이 디자인 패턴은 구체적인 유형에 직접 연결하지 않고도 코드의 유연성을 높입니다.

Java 팩토리 패턴에 대한 자세한 설명: 간단한 팩토리, 팩토리 메소드 및 추상 팩토리의 차이점과 적용 시나리오 이해 소개 소프트웨어 개발 프로세스에서 복잡한 객체 생성 및 초기화 프로세스에 직면할 때 이 문제를 해결하기 위해 팩토리 패턴을 사용해야 하는 경우가 종종 있습니다. 문제. 일반적으로 사용되는 객체 지향 프로그래밍 언어인 Java는 다양한 팩토리 패턴 구현을 제공합니다. 이 기사에서는 Java 팩토리 패턴의 세 가지 일반적인 구현 방법인 단순 팩토리, 팩토리 메소드 및 추상 팩토리를 자세히 소개하고 차이점과 적용 시나리오에 대한 심층 분석을 수행합니다. 하나,

싱글톤 패턴: 함수 오버로딩을 통해 다양한 매개변수를 갖는 싱글톤 인스턴스를 제공합니다. 팩토리 패턴: 기능 재작성을 통해 다양한 유형의 객체를 생성하여 특정 제품 클래스에서 생성 프로세스를 분리합니다.

소개 PHP 디자인 패턴은 소프트웨어 개발의 일반적인 과제에 대한 입증된 솔루션 세트입니다. 이러한 패턴을 따르면 개발자는 우아하고 강력하며 유지 관리가 가능한 코드를 만들 수 있습니다. 이는 개발자가 SOLID 원칙(단일 책임, 개방형 폐쇄형, Liskov 대체, 인터페이스 격리 및 종속성 반전)을 따르도록 지원하여 코드 가독성, 유지 관리성 및 확장성을 향상시킵니다. 디자인 패턴의 유형 다양한 디자인 패턴이 있으며 각각 고유한 목적과 장점을 가지고 있습니다. 다음은 가장 일반적으로 사용되는 PHP 디자인 패턴 중 일부입니다. 싱글톤 패턴: 클래스에 인스턴스가 하나만 있는지 확인하고 이 인스턴스에 전역적으로 액세스할 수 있는 방법을 제공합니다. 팩토리 패턴: 정확한 클래스를 지정하지 않고 객체를 생성합니다. 개발자는 조건부로

PHP 객체 지향 프로그래밍의 팩토리 패턴 이해 팩토리 패턴은 객체 생성 과정에서 객체 생성과 사용을 분리하는 데 일반적으로 사용되는 디자인 패턴입니다. PHP 객체 지향 프로그래밍에서 팩토리 패턴은 객체 생성 및 수명 주기를 더 잘 관리하는 데 도움이 될 수 있습니다. 이번 글에서는 코드 예제를 통해 PHP의 팩토리 패턴을 자세히 소개하겠습니다. PHP에서는 new 키워드를 직접 사용하는 대신 팩토리 패턴을 사용하여 객체 생성 및 초기화 프로세스를 구현할 수 있습니다. 이것의 장점은 나중에 변경이 필요할 경우

Java 팩토리 패턴에 대한 자세한 설명: 단순 팩토리, 팩토리 메소드 및 추상 팩토리 팩토리 패턴은 다양한 요구에 따라 객체를 동적으로 생성하고 객체 생성과 사용을 분리하며 재사용성과 효율성을 향상시키기 위해 일반적으로 사용되는 디자인 패턴입니다. 코드 사용. Java에는 기본 팩토리 패턴의 세 가지 주요 형태인 단순 팩토리, 팩토리 메소드 및 추상 팩토리가 있습니다. 1. 단순공장 모델 단순공장 모델은 가장 기본적인 공장모델이자 가장 단순한 형태이다. 팩토리 클래스를 통해 객체를 생성하고 다양한 매개변수를 기반으로 생성할 객체를 결정합니다.
