酆叔のBlog

  • 首页
  • 分享技术
  • 八卦黑料
  • 生活日常
  • 日记
酆叔のBlog
上辈子作恶多端,这辈子早起上班。
  1. 首页
  2. IT技术
  3. 正文

工厂模式

2024年2月21日 842点热度 0人点赞 0条评论

工厂模式提供获取某个对象实例的一个接口,同时使调用代码避免确定实例化基类的步骤;实际上就是建立一个统一的类实例化的函数接口。统一调用,统一控制。

应用场景:提供一种类,具有为您创建对象的某些方法,这样就可以使用工厂类创建对象,而不直接使用new。这样如果想更改创建的对象类型,只需更改该工厂即可。

工厂模式分三种:简单工厂模式,工厂方法模式,抽象工厂模式。

简单工厂模式

特点:将调用象和创建对象分离,使用时直接向工厂请求,减少代码的耦合.提高系统的可维护性与可扩展性。

<?php
 
class A
{
    function __construct()
    {
        echo "我是A类";
    }
}
 
class B
{
    function __construct()
    {
        echo "我是B类";
    }
}
 
class Factory
{
    public static function create($name)
    {
        if ($name == 'A') {
            return new A();
        } elseif ($name == 'B') {
            return new B();
        }
    }
}
 
$a = Factory::create('A');
$b = Factory::create('B');

工厂方法模式

特点:核心类仅仅负责给出具体工厂必须实现的接口,而无需再负责具体的产品类实例化,使得系统可以在不修改整体代码的情况下方便的引进新的产品。

<?php
 
interface Basic
{
    public function actionOne();
 
    public function actionTwo();
}
 
class A implements Basic
{
    public function actionOne()
    {
        echo "我是A类—方法1";
    }
 
    public function actionTwo()
    {
        echo "我是A类—方法2";
    }
}
 
class B implements Basic
{
    public function actionOne()
    {
        echo "我是B类—方法1";
    }
 
    public function actionTwo()
    {
        echo "我是B类—方法2";
    }
}
 
abstract class Factory
{
    abstract static function createBasic();
}
 
class A_Factory extends Factory
{
    public static function createBasic()
    {
        return new A();
    }
}
 
class B_Factory extends Factory
{
    public static function createBasic()
    {
        return new B();
    }
}
 
$a = A_Factory::createBasic();
$a->actionOne();
$a->actionTwo();
 
$b = B_Factory::createBasic();
$b->actionOne();
$b->actionTwo();

抽象工厂模式

特点:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。

<?php
 
interface Phone
{
    public function open();
 
    public function operate();
}
 
class HuaweiPhone implements Phone
{
    public function open()
    {
        echo "打开华为手机";
    }
 
    public function operate()
    {
        echo "操作华为手机";
    }
}
 
interface Bracelet
{
    public function look();
 
    public function click();
}
 
class XiaomiBracelet implements Bracelet
{
    public function look()
    {
        echo "查看小米手环";
    }
 
    public function click()
    {
        echo "点击小米手环";
    }
}
 
abstract class Factory
{
    abstract public static function createPhone();
 
    abstract public static function createBracelet();
}
 
class ProductFactory extends Factory{
    public static function createPhone()
    {
        return new HuaweiPhone();
    }
 
    public static function createBracelet()
    {
        return new XiaomiBracelet();
    }
}
 
$newPhone = ProductFactory::createPhone();
$newPhone->open();
$newPhone->operate();
 
$newBracelet = ProductFactory::createBracelet();
$newBracelet->look();
$newBracelet->click();
标签: PHP 设计模式
最后更新:2024年2月20日

酆叔

上辈子作恶多端,这辈子早起上班。

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

最新 热点 随机
最新 热点 随机
2025/05/15 周四 晴 2025/05/12 周一 晴 2025/05/08 周四 多云 2025/05/07 周三 阵雨 2025/05/06 周二 阵雨 2025/04/30 周三 多云
2025/04/27 周日 阴 改变 高质量网站分享 PHP 常量用法 PHP new的用法 GO的一些基本语法
腾讯云
又拍云
订阅
订阅

COPYRIGHT © 2024 酆叔のBlog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备2023016219号