PHP设计模式之工厂模式详解
发布:smiling 来源: PHP粉丝网 添加日期:2021-08-16 10:12:48 浏览: 评论:0
这篇文章主要为大家详细介绍了PHP设计模式之工厂模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,在开发大型系统时,往往会出现这样一种情况:
我有一部分基础数据,是类classA是从数据库A读取出来的,其他很多的功能都是基于这个基础数据来操作的。现在呢,我想把数据从数据库A变成从另外的数据源去获取,这时候,要修改起来就比较麻烦,要修改其他很多类的代码。这种设计显然是不够灵活的,换句话说,就是紧耦合的,那么什么是紧耦合呢?紧耦合就是指系统中某个部分的函数或类严重依赖于系统的其他部分中的函数或类的行为和结构。
这时,工厂模式的作用性就体现出来了。
工厂模式
就是解决这样的一些情况的设计方法。
工厂模式是一种类,建立了一个工厂来根据所需来创建对象,这种方式在多态性编程中是很重要的,允许动态替换类,修改配置等。
/*基本工厂模式代码*/
- <?php
- /**
- * 基本工厂模式
- * */
- class User {
- private $username;
- public function __construct($username) {
- $this->username = $username;
- }
- public function getUser() {
- return $this->username;
- }
- }
- class userFactory {
- static public function createUser() {
- return new User('Jack');
- }
- }
- $user = userFactory::createUser();echo $user->getUser();
- ?>
工厂模式分为:简单工厂模式、工厂方法模式、抽象工厂模式。
简单工厂模式,通过静态方法创建对象。可以理解成,只负责生产同一等级结构中的任何一个产品,但是不能新增产品。
- <?php
- /**
- *简单工厂模式
- * */
- interface userProperties {
- function getUsername();
- function getGender();
- function getJob();
- }
- class User implements userProperties{
- private $username;
- private $gender;
- private $job;
- public function __construct($username, $gender, $job) {
- $this->username = $username;
- $this->gender = $gender;
- $this->job = $job;
- }
- public function getUsername() {
- return $this->username;
- }
- public function getGender() {
- return $this->gender;
- }
- public function getJob() {
- return $this->job;
- }
- }
- class userFactory {
- static public function createUser($properties = []) {
- return new User($properties['username'], $properties['gender'], $properties['job']);
- }
- }
- $employers = [
- ['username' => 'Jack', 'gender' => 'male', 'job' => 'coder'],
- ['username' => 'Marry', 'gender' => 'female', 'job' => 'designer'],
- ];
- $user = userFactory::createUser($employers[0]);
- echo $user->getUsername();
- ?>
工厂方法模式,去掉了简单工厂模式中方法的静态属性,使其可以被子类集成,定义一个创建对象的接口,让子类去决定实例化哪个类,可以理解成,用来生产同一等级结构中的固定产品,但是支持增加产品。
- <?php
- /**
- * 工厂方法模式
- **/
- interface userProperties {
- function getUsername();
- function getGender();
- function getJob();
- }
- interface createUser {
- function create($properties);
- }
- class User implements userProperties{
- private $username;
- private $gender;
- private $job;
- public function __construct($username, $gender, $job) {
- $this->username = $username;
- $this->gender = $gender;
- $this->job = $job;
- }
- public function getUsername() {
- return $this->username;
- }
- public function getGender() {
- return $this->gender;
- }
- public function getJob() {
- return $this->job;
- }
- }
- class userFactory {
- private $user;
- public function __construct($properties = []) {
- $this->user = new User($properties['username'], $properties['gender'], $properties['job']);
- }
- public function getUser() {
- return $this->user;
- }
- }
- class FactoryMan implements createUser {
- function create($properties) {
- return new userFactory($properties);
- }
- }
- class FactoryWoman implements createUser {
- function create($properties) {
- return new userFactory($properties);
- }
- }
- class clientUser {
- static public function getClient($properties) {
- $fac = new FactoryMan;
- $man = $fac->create($properties);
- echo $man->getUser()->getUsername();
- }
- }
- $employers = [
- ['username' => 'Jack', 'gender' => 'male', 'job' => 'coder'],
- ['username' => 'Marry', 'gender' => 'female', 'job' => 'designer'],
- ];
- $user = clientUser::getClient($employers[0]);
- ?>
抽象工厂模式,提供一个创建一系列相关或者相互依赖的对象的接口,可以理解成,用来生产不用类型的全部产品,但是不能增加新品,支持增加新的类型。
- <?php
- /**
- * 抽象工厂模式
- * */
- interface userProperties {
- function getUsername();
- function getGender();
- function getJob();
- }
- interface createUser { //将对象的创建抽象成一个接口
- function createOpen($properties);//内向创建
- function createIntro($properties);//外向创建
- }
- class User implements userProperties{
- private $username;
- private $gender;
- private $job;
- public function __construct($username, $gender, $job) {
- $this->username = $username;
- $this->gender = $gender;
- $this->job = $job;
- }
- public function getUsername() {
- return $this->username;
- }
- public function getGender() {
- return $this->gender;
- }
- public function getJob() {
- return $this->job;
- }
- }
- class userFactory {
- private $user;
- public function __construct($properties = []) {
- $this->user = new User($properties['username'], $properties['gender'], $properties['job']);
- }
- public function getUser() {
- return $this->user;
- }
- }
- class FactoryMan implements createUser {
- function createOpen($properties) {
- return new userFactory($properties);
- }
- function createIntro($properties) {
- return new userFactory($properties);
- }
- }
- class FactoryWoman implements createUser {
- function createOpen($properties) {
- return new userFactory($properties);
- }
- function createIntro($properties) {
- return new userFactory($properties);
- }
- }
- class clientUser {
- static public function getClient($properties) {
- $fac = new FactoryMan;
- $man = $fac->createOpen($properties);
- echo $man->getUser()->getUsername();
- }
- }
- $employers = [
- ['username' => 'Jack', 'gender' => 'male', 'job' => 'coder'],
- ['username' => 'Marry', 'gender' => 'female', 'job' => 'designer'],
- ];
- $user = clientUser::getClient($employers[0]);
- ?>
如有错误,请指正。
Tags: PHP设计模式
- 上一篇:PHP面向对象多态性实现方法简单示例
- 下一篇:详解php中的类与对象(继承)
相关文章
- ·php设计模式是什么,该如何理解(2014-06-10)
- ·php设计模式 建造者模式 与Adapter(适配器模式)(2014-08-02)
- ·PHP设计模式之建造者模式定义与用法简单示例(2018-10-13)
- ·PHP设计模式之委托模式定义与用法简单示例(2018-10-13)
- ·PHP设计模式概述(2020-02-15)
- ·php设计模式之单例模式使用示例(2020-08-29)
- ·php设计模式之命令模式使用示例(2020-10-06)
- ·php基础设计模式大全(注册树模式、工厂模式、单列模式)(2021-06-16)
- ·PHP设计模式之简单投诉页面实例(2021-07-11)
- ·实例讲解PHP设计模式编程中的简单工厂模式(2021-07-12)
- ·PHP设计模式之模板方法模式实例浅析(2021-11-02)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)