数码资讯
PHP面向对象编程(OOP)学习笔记(三)——单示例模式和工厂模式
系统的设计模式无疑比其他设计模式更具优势,设计模式使得代码编译成为真正的工程师。设计模式是软件工程的基石,就像建筑物的结构一样。 单例模式 当您需要确保一个对象只能有一个实例时,单例模式非常有用,它将所创建对象的控件委托给一个点,并且在任何时候,应用程序只有一个实例,单个类不应该实例化类的外部。单个
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
系统的设计模式无疑比其他设计模式更具优势,设计模式使得代码编译成为真正的工程师。设计模式是软件工程的基石,就像建筑物的结构一样。
单例模式
当您需要确保一个对象只能有一个实例时,单例模式非常有用,它将所创建对象的控件委托给一个点,并且在任何时候,应用程序只有一个实例,单个类不应该实例化类的外部。单个类应该具有以下元素。
必须有一个具有私有访问级别的构造函数,它有效地防止类被任意实例化。
对于保存类的实例,必须有一个静态变量。
你必须访问这个实例的公共静态方法,这是通常被称为GetInstance()。
一个私人的,空__clone方法必须拥有防止实例被克隆和复制。
下面用一个简单的单类的例子来说明
复制代码代码如下所示:
类的类名
{
公共静态_instance美元;
私有函数__construct()
{
#代码…
}
私有函数__clone()
{
#空
}
公共静态getInstance()函数
{
如果(!(自::_instance美元是自))
{
自::_instance美元=新的自我();
}
回归自我::_instance美元;
}
公共函数SayHi()
{
嗨男孩!;
}
}
为应用程序=类名::GetInstance();
为应用程序-> SayHi();
*
*输出
*
*嗨,男孩!
*
* /
简单工厂模式
当你有大量的实现相同的接口类,实例化的类在正确的时间,如果你将这些新项目的每一个角落,它不仅会使业务逻辑混乱,也使项目难以维持。此时,如果工厂的模型引进的概念,我们可以很好的处理这个问题,我们也可以让工厂类返回相应的实例通过使用应用程序配置或提供参数。
工厂类,并实例化类的工厂类,是专门用于创建其他类的对象。工厂模式通常与接口一起使用,使应用程序不需要知道这些实例化的类的细节,只要知道工厂支持一个接口类这是非常方便的使用。以下是一个简单的下一个工厂类的使用实例。
复制代码代码如下所示:
接口productinterface
{
公共功能showproductinfo();
}
类产品实现了productinterface
{
showproductinfo()函数
{
echo'this是产品。;
}
}
productb productinterface类实现
{
showproductinfo()函数
{
echo'this产品'.;
}
}
类制品
{
公共静态函数厂($产品类型)
{
产品类型= 'product美元。Strtoupper($产品类型);
如果(class_exists($产品类型))
{
返回新的产品类型(美元);
}
其他的
{
抛出新的异常(错误处理请求
}
}
}
需要有一个对象的模型
X元=制品厂::(A);
x美元->(showproductinfo);
B对象需要有一个模型
$ O =制品厂(B):;
$ O ->(showproductinfo);
/ /可以调用showproductinfo方法,因为productinterface接口。
总结
该模型是软件工程的基石,像建筑的设计图纸,其中有两种模式:单一模式和工程模型,在一个单独的类,有一个静态变量保留实例本身提供了一个静态方法获取这个静态变量。单件类同时标签的构造函数和复制功能为私有,防止断实例的唯一性。工厂模式创建不同类型的基于输入参数或程序的配置实例。工厂类返回对象,工厂类在多态编程实践中非常重要。
单例模式
当您需要确保一个对象只能有一个实例时,单例模式非常有用,它将所创建对象的控件委托给一个点,并且在任何时候,应用程序只有一个实例,单个类不应该实例化类的外部。单个类应该具有以下元素。
必须有一个具有私有访问级别的构造函数,它有效地防止类被任意实例化。
对于保存类的实例,必须有一个静态变量。
你必须访问这个实例的公共静态方法,这是通常被称为GetInstance()。
一个私人的,空__clone方法必须拥有防止实例被克隆和复制。
下面用一个简单的单类的例子来说明
复制代码代码如下所示:
类的类名
{
公共静态_instance美元;
私有函数__construct()
{
#代码…
}
私有函数__clone()
{
#空
}
公共静态getInstance()函数
{
如果(!(自::_instance美元是自))
{
自::_instance美元=新的自我();
}
回归自我::_instance美元;
}
公共函数SayHi()
{
嗨男孩!;
}
}
为应用程序=类名::GetInstance();
为应用程序-> SayHi();
*
*输出
*
*嗨,男孩!
*
* /
简单工厂模式
当你有大量的实现相同的接口类,实例化的类在正确的时间,如果你将这些新项目的每一个角落,它不仅会使业务逻辑混乱,也使项目难以维持。此时,如果工厂的模型引进的概念,我们可以很好的处理这个问题,我们也可以让工厂类返回相应的实例通过使用应用程序配置或提供参数。
工厂类,并实例化类的工厂类,是专门用于创建其他类的对象。工厂模式通常与接口一起使用,使应用程序不需要知道这些实例化的类的细节,只要知道工厂支持一个接口类这是非常方便的使用。以下是一个简单的下一个工厂类的使用实例。
复制代码代码如下所示:
接口productinterface
{
公共功能showproductinfo();
}
类产品实现了productinterface
{
showproductinfo()函数
{
echo'this是产品。;
}
}
productb productinterface类实现
{
showproductinfo()函数
{
echo'this产品'.;
}
}
类制品
{
公共静态函数厂($产品类型)
{
产品类型= 'product美元。Strtoupper($产品类型);
如果(class_exists($产品类型))
{
返回新的产品类型(美元);
}
其他的
{
抛出新的异常(错误处理请求
}
}
}
需要有一个对象的模型
X元=制品厂::(A);
x美元->(showproductinfo);
B对象需要有一个模型
$ O =制品厂(B):;
$ O ->(showproductinfo);
/ /可以调用showproductinfo方法,因为productinterface接口。
总结
该模型是软件工程的基石,像建筑的设计图纸,其中有两种模式:单一模式和工程模型,在一个单独的类,有一个静态变量保留实例本身提供了一个静态方法获取这个静态变量。单件类同时标签的构造函数和复制功能为私有,防止断实例的唯一性。工厂模式创建不同类型的基于输入参数或程序的配置实例。工厂类返回对象,工厂类在多态编程实践中非常重要。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。