PHP简单工厂与抽象工厂对比工厂模式有不同的变体。简单工厂、工厂方法、抽象工厂各有适用场景。今天说说各种工厂模式的区别和实现。简单工厂。phpinterface Logger{public function log(string $message): void;}class FileLogger implements Logger{public function log(string $message): void{file_put_contents(/tmp/app.log, $message . \n, FILE_APPEND);}}class EchoLogger implements Logger{public function log(string $message): void{echo [LOG] $message\n;}}class NullLogger implements Logger{public function log(string $message): void {}}// 简单工厂class LoggerFactory{public static function create(string $type): Logger{return match ($type) {file new FileLogger(),echo new EchoLogger(),null new NullLogger(),default throw new InvalidArgumentException(不支持的日志类型: $type),};}}$logger LoggerFactory::create(echo);$logger-log(测试);?工厂方法。phpabstract class LoggerCreator{abstract public function createLogger(): Logger;public function log(string $message): void{$logger $this-createLogger();$logger-log($message);}}class FileLoggerCreator extends LoggerCreator{public function createLogger(): Logger{return new FileLogger();}}class EchoLoggerCreator extends LoggerCreator{public function createLogger(): Logger{return new EchoLogger();}}?抽象工厂。phpinterface Button{public function render(): string;}interface Checkbox{public function render(): string;}class WindowsButton implements Button{public function render(): string { return 确定; }}class MacButton implements Button{public function render(): string { return 确定; }}class WindowsCheckbox implements Checkbox{public function render(): string { return ; }}class MacCheckbox implements Checkbox{public function render(): string { return ; }}interface UIFactory{public function createButton(): Button;public function createCheckbox(): Checkbox;}class WindowsFactory implements UIFactory{public function createButton(): Button { return new WindowsButton(); }public function createCheckbox(): Checkbox { return new WindowsCheckbox(); }}class MacFactory implements UIFactory{public function createButton(): Button { return new MacButton(); }public function createCheckbox(): Checkbox { return new MacCheckbox(); }}function createUI(UIFactory $factory): void{echo $factory-createButton()-render() . \n;echo $factory-createCheckbox()-render() . \n;}createUI(new WindowsFactory());createUI(new MacFactory());?工厂模式的选择依据。// 简单工厂创建逻辑简单只有一个工厂类// 工厂方法每个产品对应一个工厂子类// 抽象工厂创建一系列相关产品简单工厂适合产品种类少的场景。工厂方法让新增产品不需要修改工厂类。抽象工厂用于创建产品族。选择哪种模式取决于具体需求。
PHP简单工厂与抽象工厂对比
发布时间:2026/6/8 10:35:26
PHP简单工厂与抽象工厂对比工厂模式有不同的变体。简单工厂、工厂方法、抽象工厂各有适用场景。今天说说各种工厂模式的区别和实现。简单工厂。phpinterface Logger{public function log(string $message): void;}class FileLogger implements Logger{public function log(string $message): void{file_put_contents(/tmp/app.log, $message . \n, FILE_APPEND);}}class EchoLogger implements Logger{public function log(string $message): void{echo [LOG] $message\n;}}class NullLogger implements Logger{public function log(string $message): void {}}// 简单工厂class LoggerFactory{public static function create(string $type): Logger{return match ($type) {file new FileLogger(),echo new EchoLogger(),null new NullLogger(),default throw new InvalidArgumentException(不支持的日志类型: $type),};}}$logger LoggerFactory::create(echo);$logger-log(测试);?工厂方法。phpabstract class LoggerCreator{abstract public function createLogger(): Logger;public function log(string $message): void{$logger $this-createLogger();$logger-log($message);}}class FileLoggerCreator extends LoggerCreator{public function createLogger(): Logger{return new FileLogger();}}class EchoLoggerCreator extends LoggerCreator{public function createLogger(): Logger{return new EchoLogger();}}?抽象工厂。phpinterface Button{public function render(): string;}interface Checkbox{public function render(): string;}class WindowsButton implements Button{public function render(): string { return 确定; }}class MacButton implements Button{public function render(): string { return 确定; }}class WindowsCheckbox implements Checkbox{public function render(): string { return ; }}class MacCheckbox implements Checkbox{public function render(): string { return ; }}interface UIFactory{public function createButton(): Button;public function createCheckbox(): Checkbox;}class WindowsFactory implements UIFactory{public function createButton(): Button { return new WindowsButton(); }public function createCheckbox(): Checkbox { return new WindowsCheckbox(); }}class MacFactory implements UIFactory{public function createButton(): Button { return new MacButton(); }public function createCheckbox(): Checkbox { return new MacCheckbox(); }}function createUI(UIFactory $factory): void{echo $factory-createButton()-render() . \n;echo $factory-createCheckbox()-render() . \n;}createUI(new WindowsFactory());createUI(new MacFactory());?工厂模式的选择依据。// 简单工厂创建逻辑简单只有一个工厂类// 工厂方法每个产品对应一个工厂子类// 抽象工厂创建一系列相关产品简单工厂适合产品种类少的场景。工厂方法让新增产品不需要修改工厂类。抽象工厂用于创建产品族。选择哪种模式取决于具体需求。