美文网首页
01-简单工厂模式

01-简单工厂模式

作者: Ma91c | 来源:发表于2017-06-16 17:27 被阅读0次

简单工厂模式 (Simple Factory Pattern)

使用curl发送请求时,通常需要设置请求头信息User-Agent
使用简单工厂模式来创建属于不同平台(手机端、微信端、PC端)的UserAgent类。

代码实现

1.抽象UserAgent

abstract class UserAgent
{
    abstract public static function getAgents();
    
    public static function getAgent()
    {
        $agents = self::getAgents();
        $index = array_rand($agents);
        return $agents[$index];
    }
}

2.具体UserAgent

/**
 * MobileUserAgent 手机平台
 */
class MobileUserAgent extends UserAgent
{
    public static function getAgents()
    {
        return [
            'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', // iPhone 6plus
            'Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', // iPad
            'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.23 Mobile Safari/537.36', // Galaxy S5
            'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.23 Mobile Safari/537.36', // Nexus 5X
            'Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3', // iPod
        ];
    }
}

/**
 * WechatUserAgent 微信平台
 */
class WechatUserAgent extends UserAgent
{
    public static function getAgents()
    {
        return [
            'mozilla/5.0 (linux; u; android 4.1.2; zh-cn; mi-one plus build/jzo54k) applewebkit/534.30 (khtml, like gecko) version/4.0 mobile safari/534.30 micromessenger/5.0.1.352',
            'mozilla/5.0 (iphone; cpu iphone os 5_1_1 like mac os x) applewebkit/534.46 (khtml, like gecko) mobile/9b206 micromessenger/5.0',
        ];
    }
}

/**
 * PcUserAgent PC平台
 */
class PcUserAgent extends UserAgent
{
    public static function getAgents()
    {
        return [
            'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36',
            // Windows
            'Opera/9.80 (Windows NT 6.1; WOW64; U; en) Presto/2.10.229 Version/11.62',
            'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2859.0 Safari/537.36',
        ];
    }
}

/**
 * AllUserAgent 任意平台
 */
class AllUserAgent extends UserAgent
{
    public static function getAgents()
    {
        return array_merge(PcUserAgent::getAgents(), MobileUserAgent::getAgents(), WechatUserAgents());
    }
}

3.工厂类

class UserAgentFactoty
{
    const AGENT_TYPE_ALL = 0;
    const AGENT_TYPE_MOBILE = 1;
    const AGENT_TYPE_WECHAT = 2;
    const AGENT_TYPE_PC = 3;
    
    protected static $agentTypes = [
        self::AGENT_TYPE_ALL => 'All',
        self::AGENT_TYPE_MOBILE => 'Mobile',
        self::AGENT_TYPE_WECHAT => 'Wechat',
        self::AGENT_TYPE_PC => 'Pc',
    ];
    
    public static function createUserAgent($agentType = self::AGENT_TYPE_ALL)
    {
        if (!array_key_exists($agentType, self::$agentTypes)) {
            $agentType = self::AGENT_TYPE_ALL;
        }
        $className = self::$agentTypes[$agentType];
        return new $className();
    }
}

相关文章

  • 01-简单工厂模式

    简单工厂模式 (Simple Factory Pattern) 使用curl发送请求时,通常需要设置请求头信息U...

  • [Android]三种工厂模式总结。

    Android中,工厂模式分为三种:简单工厂模式、工厂方法模式、抽象工厂模式。 一.简单工厂模式。 定义:简单工厂...

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

  • 工厂模式

    工厂模式包含三种模式:简单工厂模式、工厂方法模式和抽象工厂模式。 简单工厂模式 定义简单工厂模式:由一个工厂类根据...

  • Java设计模式——工厂模式

    工厂模式简单工厂模式工厂方法模式抽象工厂模式 1.简单工厂模式 1.基本介绍1)简单工厂模式也叫静态工厂模式,是属...

  • iOS设计模式-工厂模式

    工厂模式分为简单工厂模式,工厂模式、抽象工厂模式三类。 简单工厂模式 1. 定义 简单工厂模式并不是常用的设计模式...

  • 相近设计模式比较

    设计模式干货: 简单工厂模式 vs. 工厂模式 vs. 抽象工厂模式简单工厂和工厂模式区别? 简单工厂没有多个子类...

  • Android设计模式:工厂设计模式

    目录 简单工厂模式工厂方法模式抽象工厂模式 简单工厂模式 简单工厂模式是所有工厂模式的基础,不属于23种设计模式范...

  • 设计模式2-工厂模式

    工厂模式分为简单工厂模式、工厂方法模式和抽象工厂模式 简单工厂模式 简单工厂模式,就是建立一个工厂类,对实现了同一...

  • 创建型模式:01-简单工厂模式

    类图: 示例代码: 运行结果:

网友评论

      本文标题:01-简单工厂模式

      本文链接:https://www.haomeiwen.com/subject/kiemqxtx.html