Repository: baijunyao/design-patterns
Branch: master
Commit: 577d31ba1be0
Files: 129
Total size: 80.7 KB
Directory structure:
gitextract__6eyr3aa/
├── AbstractFactory/
│ ├── Article.php
│ ├── Factory.php
│ ├── MySQLArticle.php
│ ├── MySQLFactory.php
│ ├── MySQLUser.php
│ ├── SQLiteArticle.php
│ ├── SQLiteFactory.php
│ ├── SQLiteUser.php
│ ├── User.php
│ └── index.php
├── AbstractFactoryWithReflection/
│ ├── Article.php
│ ├── Factory.php
│ ├── MySQLArticle.php
│ ├── MySQLUser.php
│ ├── SQLiteArticle.php
│ ├── SQLiteUser.php
│ ├── User.php
│ ├── config.php
│ └── index.php
├── AbstractFactoryWithSimpleFactory/
│ ├── Article.php
│ ├── Factory.php
│ ├── MySQLArticle.php
│ ├── MySQLUser.php
│ ├── SQLiteArticle.php
│ ├── SQLiteUser.php
│ ├── User.php
│ ├── config.php
│ └── index.php
├── Bridge/
│ ├── Circle.php
│ ├── Color.php
│ ├── Graph.php
│ ├── Green.php
│ ├── Red.php
│ ├── Square.php
│ ├── Triangle.php
│ ├── Yellow.php
│ └── index.php
├── ClassAdapter/
│ ├── Adaptee.php
│ ├── Adapter.php
│ ├── Target.php
│ └── index.php
├── Command/
│ ├── Command.php
│ ├── CommandInterface.php
│ ├── Invoker.php
│ ├── Receiver.php
│ └── index.php
├── Decorator/
│ ├── Decorator.php
│ ├── Egg.php
│ ├── Food.php
│ ├── Kaolengmian.php
│ ├── Latiao.php
│ ├── Sausage.php
│ ├── Shouzhuabing.php
│ └── index.php
├── Facade/
│ ├── Encrypt.php
│ ├── Facade.php
│ ├── File.php
│ └── index.php
├── FactoryMethod/
│ ├── Add.php
│ ├── AddFactory.php
│ ├── Div.php
│ ├── DivFactory.php
│ ├── Factory.php
│ ├── Mul.php
│ ├── MulFactory.php
│ ├── Operation.php
│ ├── Sub.php
│ ├── SubFactory.php
│ └── index.php
├── Flyweight/
│ ├── ConcreteFlyweight.php
│ ├── Flyweight.php
│ ├── FlyweightFactory.php
│ ├── UnsharedConcreteFlyweight.php
│ └── index.php
├── Iterator/
│ ├── ContainerInterface.php
│ ├── IteratorInterface.php
│ ├── NameContainer.php
│ ├── NameIterator.php
│ └── index.php
├── ObjectAdapter/
│ ├── Adaptee.php
│ ├── Adapter.php
│ ├── Target.php
│ └── index.php
├── Observer/
│ ├── EmailObserver.php
│ ├── Observer.php
│ ├── SMSObserver.php
│ ├── Subject.php
│ ├── SubjectAbstract.php
│ └── index.php
├── Prototype/
│ ├── Car.php
│ ├── DeepDrive.php
│ ├── ShallowDrive.php
│ └── index.php
├── Proxy/
│ ├── Proxy.php
│ ├── RealSubject.php
│ ├── Subject.php
│ └── index.php
├── SafeComposite/
│ ├── Component.php
│ ├── Dir.php
│ ├── File.php
│ └── index.php
├── SimpleFactory/
│ ├── Add.php
│ ├── Bad.php
│ ├── Div.php
│ ├── Factory.php
│ ├── Mul.php
│ ├── Operation.php
│ ├── Sub.php
│ └── index.php
├── Template/
│ ├── Huawei.php
│ ├── Phone.php
│ ├── Xiaomi.php
│ └── index.php
├── TransparentComposite/
│ ├── Component.php
│ ├── Dir.php
│ ├── File.php
│ └── index.php
├── composer.json
├── index.html
├── readme.md
├── singleton/
│ └── index.php
└── vendor/
├── autoload.php
└── composer/
├── ClassLoader.php
├── LICENSE
├── autoload_classmap.php
├── autoload_namespaces.php
├── autoload_psr4.php
├── autoload_real.php
└── autoload_static.php
================================================
FILE CONTENTS
================================================
================================================
FILE: AbstractFactory/Article.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactory;
/**
* Article 产品接口
*
* Interface Article
* @package Baijunyao\DesignPatterns\AbstractFactory
*/
interface Article
{
/**
* 新增
*
* @return mixed
*/
public function insert();
/**
* 查询
*
* @return mixed
*/
public function select();
}
================================================
FILE: AbstractFactory/Factory.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactory;
/**
* 工厂接口
*
* Interface Factory
* @package Baijunyao\DesignPatterns\AbstractFactory
*/
interface Factory
{
/**
* 创建 User 产品
*
* @return mixed
*/
public function createUser();
/**
* 创建 Article 产品
*
* @return mixed
*/
public function createArticle();
}
================================================
FILE: AbstractFactory/MySQLArticle.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactory;
/**
* 应用于 MySQL 的 Article
*
* Class MySQLArticle
* @package Baijunyao\DesignPatterns\AbstractFactory
*/
class MySQLArticle implements Article
{
/**
* 新增
*/
public function insert()
{
echo '向 MySQL 数据库中插入 Article';
}
/**
* 查询
*/
public function select()
{
echo '从 MySQL 数据库中查询 Article';
}
}
================================================
FILE: AbstractFactory/MySQLFactory.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactory;
/**
* MySQL 工厂
*
* Class MySQLFactory
* @package Baijunyao\DesignPatterns\AbstractFactory
*/
class MySQLFactory implements Factory
{
/**
* 创建 MySQLUser 产品
*
* @return MySQLUser|mixed
*/
public function createUser()
{
return new MySQLUser();
}
/**
* 创建 MySQLArticle 产品
*
* @return MySQLArticle|mixed
*/
public function createArticle()
{
return new MySQLArticle();
}
}
================================================
FILE: AbstractFactory/MySQLUser.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactory;
/**
* 应用于 MySQL 的 User
*
* Class MySQLUser
* @package Baijunyao\DesignPatterns\AbstractFactory
*/
class MySQLUser implements User
{
/**
* 新增
*/
public function insert()
{
echo '向 MySQL 数据库中插入 User';
}
/**
* 查询
*/
public function select()
{
echo '从 MySQL 数据库中查询 User';
}
}
================================================
FILE: AbstractFactory/SQLiteArticle.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactory;
/**
* 适用于 SQLite 的 Article
*
* Class SQLiteArticle
* @package Baijunyao\DesignPatterns\AbstractFactory
*/
class SQLiteArticle implements Article
{
/**
* 新增
*
* @return mixed|void
*/
public function insert()
{
echo '向 SQLite 数据库中插入 Article';
}
/**
* 查询
*
* @return mixed|void
*/
public function select()
{
echo '从 SQLite 数据库中查询 Article';
}
}
================================================
FILE: AbstractFactory/SQLiteFactory.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactory;
/**
* SQLite 工厂
*
* Class SQLiteFactory
* @package Baijunyao\DesignPatterns\AbstractFactory
*/
class SQLiteFactory implements Factory
{
/**
* 创建 SQLiteUser 产品
*
* @return SQLiteUser|mixed
*/
public function createUser()
{
return new SQLiteUser();
}
/**
* 创建 SQLiteArticle 产品
*
* @return SQLiteArticle|mixed
*/
public function createArticle()
{
return new SQLiteArticle();
}
}
================================================
FILE: AbstractFactory/SQLiteUser.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactory;
/**
* 适用于 SQLite 的 User
*
* Class SQLiteUser
* @package Baijunyao\DesignPatterns\AbstractFactory
*/
class SQLiteUser implements User
{
/**
* 新增
*/
public function insert()
{
echo '向SQLite数据库中插入 User';
}
/**
* 查询
*/
public function select()
{
echo '从SQLite数据库中查询 User';
}
}
================================================
FILE: AbstractFactory/User.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactory;
/**
* User 产品接口
*
* Interface User
* @package Baijunyao\DesignPatterns\AbstractFactory
*/
interface User
{
/**
* 新增
*
* @return mixed
*/
public function insert();
/**
* 查询
*
* @return mixed
*/
public function select();
}
================================================
FILE: AbstractFactory/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactory;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\AbstractFactory
*/
class Client
{
/**
* 运行
*/
public function run()
{
// 使用 MySQL
$factory = new MySQLFactory();
// 创建 user
$user = $factory->createUser();
$user->insert();
echo '<br>';
$user->select();
echo '<hr>';
$factory = new MySQLFactory();
// 创建 article
$article = $factory->createArticle();
$article->insert();
echo '<br>';
$article->select();
echo '<br><br>';
// 使用 SQLite
$factory = new SQLiteFactory();
// 创建 user
$user = $factory->createUser();
$user->insert();
echo '<br>';
$user->select();
echo '<hr>';
$factory = new SQLiteFactory();
// 创建 article
$article = $factory->createArticle();
$article->insert();
echo '<br>';
$article->select();
}
}
$client = new Client();
$client->run();
================================================
FILE: AbstractFactoryWithReflection/Article.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactoryWithReflection;
/**
* Article 产品接口
*
* Interface Article
* @package Baijunyao\DesignPatterns\AbstractFactoryWithReflection
*/
interface Article
{
/**
* 新增
*
* @return mixed
*/
public function insert();
/**
* 查询
*
* @return mixed
*/
public function select();
}
================================================
FILE: AbstractFactoryWithReflection/Factory.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactoryWithReflection;
use ReflectionClass;
use ReflectionException;
class Factory
{
/**
* 数据库
*
* @var string
*/
public $db = 'MySQL';
/**
* 产品类的命名空间
*
* @var string
*/
public $namespace = 'Baijunyao\DesignPatterns\AbstractFactoryWithReflection\\';
/**
* Factory constructor.
*/
public function __construct()
{
/**
* 从配置项中获取 driver
*/
$config = include 'config.php';
$this->db = $config['driver'];
}
/**
* 创建 User 产品
*
* @return MySQLUser|SQLiteUser
*/
public function createUser()
{
$className = $this->namespace . $this->db . 'User';
try {
$class = new ReflectionClass($className);
$user = $class->newInstance();
} catch (ReflectionException $Exception) {
throw new \InvalidArgumentException('暂不支持的数据库类型');
}
return $user;
}
/**
* 创建 Article 产品
*
* @return MySQLArticle|SQLiteArticle
*/
public function createArticle()
{
$className = $this->namespace . $this->db . 'Article';
try {
$class = new ReflectionClass($className);
$article = $class->newInstance();
} catch (ReflectionException $Exception) {
throw new \InvalidArgumentException('暂不支持的数据库类型');
}
return $article;
}
}
================================================
FILE: AbstractFactoryWithReflection/MySQLArticle.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactoryWithReflection;
/**
* 应用于 MySQL 的 Article
*
* Class MySQLArticle
* @package Baijunyao\DesignPatterns\AbstractFactoryWithReflection
*/
class MySQLArticle implements Article
{
/**
* 新增
*/
public function insert()
{
echo '向 MySQL 数据库中插入 Article';
}
/**
* 查询
*/
public function select()
{
echo '从 MySQL 数据库中查询 Article';
}
}
================================================
FILE: AbstractFactoryWithReflection/MySQLUser.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactoryWithReflection;
/**
* 应用于 MySQL 的 User
*
* Class MySQLUser
* @package Baijunyao\DesignPatterns\AbstractFactoryWithReflection
*/
class MySQLUser implements User
{
/**
* 新增
*/
public function insert()
{
echo '向 MySQL 数据库中插入 User';
}
/**
* 查询
*/
public function select()
{
echo '从 MySQL 数据库中查询 User';
}
}
================================================
FILE: AbstractFactoryWithReflection/SQLiteArticle.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactoryWithReflection;
/**
* 适用于 SQLite 的 Article
*
* Class SQLiteArticle
* @package Baijunyao\DesignPatterns\AbstractFactoryWithReflection
*/
class SQLiteArticle implements Article
{
/**
* 新增
*
* @return mixed|void
*/
public function insert()
{
echo '向 SQLite 数据库中插入 Article';
}
/**
* 查询
*
* @return mixed|void
*/
public function select()
{
echo '从 SQLite 数据库中查询 Article';
}
}
================================================
FILE: AbstractFactoryWithReflection/SQLiteUser.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactoryWithReflection;
/**
* 适用于 SQLite 的 User
*
* Class SQLiteUser
* @package Baijunyao\DesignPatterns\AbstractFactoryWithReflection
*/
class SQLiteUser implements User
{
/**
* 新增
*/
public function insert()
{
echo '向SQLite数据库中插入 User';
}
/**
* 查询
*/
public function select()
{
echo '从SQLite数据库中查询 User';
}
}
================================================
FILE: AbstractFactoryWithReflection/User.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactoryWithReflection;
/**
* User 产品接口
*
* Interface User
* @package Baijunyao\DesignPatterns\AbstractFactoryWithReflection
*/
interface User
{
/**
* 新增
*
* @return mixed
*/
public function insert();
/**
* 查询
*
* @return mixed
*/
public function select();
}
================================================
FILE: AbstractFactoryWithReflection/config.php
================================================
<?php
return [
'driver' => 'SQLite'
];
================================================
FILE: AbstractFactoryWithReflection/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactoryWithReflection;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\AbstractFactoryWithReflection
*/
class Client
{
/**
* 运行
*/
public function run()
{
$factory = new Factory();
// 创建 user
$user = $factory->createUser();
$user->insert();
echo '<br>';
$user->select();
echo '<hr>';
// 创建 article
$article = $factory->createArticle();
$article->insert();
echo '<br>';
$article->select();
}
}
$client = new Client();
$client->run();
================================================
FILE: AbstractFactoryWithSimpleFactory/Article.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactoryWithSimpleFactory;
/**
* Article 产品接口
*
* Interface Article
* @package Baijunyao\DesignPatterns\AbstractFactoryWithSimpleFactory
*/
interface Article
{
/**
* 新增
*
* @return mixed
*/
public function insert();
/**
* 查询
*
* @return mixed
*/
public function select();
}
================================================
FILE: AbstractFactoryWithSimpleFactory/Factory.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactoryWithSimpleFactory;
class Factory
{
public $db = 'MySQL';
/**
* Factory constructor.
*/
public function __construct()
{
/**
* 从配置项中获取 driver
*/
$config = include 'config.php';
$this->db = $config['driver'];
}
/**
* 创建 User 产品
*
* @return MySQLUser|SQLiteUser
*/
public function createUser()
{
switch ($this->db) {
case 'MySQL':
$user = new MySQLUser();
break;
case 'SQLite':
$user = new SQLiteUser();
break;
default:
throw new \InvalidArgumentException('暂不支持的数据库类型');
}
return $user;
}
/**
* 创建 Article 产品
*
* @return MySQLArticle|SQLiteArticle
*/
public function createArticle()
{
switch ($this->db) {
case 'MySQL':
$article = new MySQLArticle();
break;
case 'SQLite':
$article = new SQLiteArticle();
break;
default:
throw new \InvalidArgumentException('暂不支持的数据库类型');
}
return $article;
}
}
================================================
FILE: AbstractFactoryWithSimpleFactory/MySQLArticle.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactoryWithSimpleFactory;
/**
* 应用于 MySQL 的 Article
*
* Class MySQLArticle
* @package Baijunyao\DesignPatterns\AbstractFactoryWithSimpleFactory
*/
class MySQLArticle implements Article
{
/**
* 新增
*/
public function insert()
{
echo '向 MySQL 数据库中插入 Article';
}
/**
* 查询
*/
public function select()
{
echo '从 MySQL 数据库中查询 Article';
}
}
================================================
FILE: AbstractFactoryWithSimpleFactory/MySQLUser.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactoryWithSimpleFactory;
/**
* 应用于 MySQL 的 User
*
* Class MySQLUser
* @package Baijunyao\DesignPatterns\AbstractFactoryWithSimpleFactory
*/
class MySQLUser implements User
{
/**
* 新增
*/
public function insert()
{
echo '向 MySQL 数据库中插入 User';
}
/**
* 查询
*/
public function select()
{
echo '从 MySQL 数据库中查询 User';
}
}
================================================
FILE: AbstractFactoryWithSimpleFactory/SQLiteArticle.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactoryWithSimpleFactory;
/**
* 适用于 SQLite 的 Article
*
* Class SQLiteArticle
* @package Baijunyao\DesignPatterns\AbstractFactoryWithSimpleFactory
*/
class SQLiteArticle implements Article
{
/**
* 新增
*
* @return mixed|void
*/
public function insert()
{
echo '向 SQLite 数据库中插入 Article';
}
/**
* 查询
*
* @return mixed|void
*/
public function select()
{
echo '从 SQLite 数据库中查询 Article';
}
}
================================================
FILE: AbstractFactoryWithSimpleFactory/SQLiteUser.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactoryWithSimpleFactory;
/**
* 适用于 SQLite 的 User
*
* Class SQLiteUser
* @package Baijunyao\DesignPatterns\AbstractFactoryWithSimpleFactory
*/
class SQLiteUser implements User
{
/**
* 新增
*/
public function insert()
{
echo '向SQLite数据库中插入 User';
}
/**
* 查询
*/
public function select()
{
echo '从SQLite数据库中查询 User';
}
}
================================================
FILE: AbstractFactoryWithSimpleFactory/User.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactoryWithSimpleFactory;
/**
* User 产品接口
*
* Interface User
* @package Baijunyao\DesignPatterns\AbstractFactoryWithSimpleFactory
*/
interface User
{
/**
* 新增
*
* @return mixed
*/
public function insert();
/**
* 查询
*
* @return mixed
*/
public function select();
}
================================================
FILE: AbstractFactoryWithSimpleFactory/config.php
================================================
<?php
return [
'driver' => 'SQLite'
];
================================================
FILE: AbstractFactoryWithSimpleFactory/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\AbstractFactoryWithSimpleFactory;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\AbstractFactoryWithSimpleFactory
*/
class Client
{
/**
* 运行
*/
public function run()
{
$factory = new Factory();
// 创建 user
$user = $factory->createUser();
$user->insert();
echo '<br>';
$user->select();
echo '<hr>';
// 创建 article
$article = $factory->createArticle();
$article->insert();
echo '<br>';
$article->select();
}
}
$client = new Client();
$client->run();
================================================
FILE: Bridge/Circle.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Bridge;
/**
* 圆形
*
* Class Circle
* @package Baijunyao\DesignPatterns\Bridge
*/
class Circle extends Graph
{
/**
* @return mixed|void
*/
public function draw()
{
echo "画一个 {$this->color->run()} 的圆形";
}
}
================================================
FILE: Bridge/Color.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Bridge;
/**
* 颜色抽象类
*
* Class Color
* @package Baijunyao\DesignPatterns\Bridge
*/
abstract class Color
{
/**
* @return mixed
*/
abstract public function run();
}
================================================
FILE: Bridge/Graph.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Bridge;
/**
* 形状抽象类
*
* Class Graph
* @package Baijunyao\DesignPatterns\Bridge
*/
abstract class Graph
{
/**
* 颜色
*
* @var Color
*/
protected $color;
/**
* Graph constructor.
* @param Color $color
*/
public function __construct(Color $color)
{
$this->color = $color;
}
/**
* @return mixed
*/
abstract public function draw();
}
================================================
FILE: Bridge/Green.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Bridge;
/**
* 绿色
*
* Class Green
* @package Baijunyao\DesignPatterns\Bridge
*/
class Green extends Color
{
/**
* @return mixed|string
*/
public function run()
{
return '绿色';
}
}
================================================
FILE: Bridge/Red.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Bridge;
/**
* 红色
*
* Class Red
* @package Baijunyao\DesignPatterns\Bridge
*/
class Red extends Color
{
/**
* @return mixed|string
*/
public function run()
{
return '红色';
}
}
================================================
FILE: Bridge/Square.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Bridge;
/**
* 正方形
*
* Class Square
* @package Baijunyao\DesignPatterns\Bridge
*/
class Square extends Graph
{
/**
* @return mixed|void
*/
public function draw()
{
echo "画一个 {$this->color->run()} 的正方形";
}
}
================================================
FILE: Bridge/Triangle.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Bridge;
/**
* 三角形
*
* Class Triangle
* @package Baijunyao\DesignPatterns\Bridge
*/
class Triangle extends Graph
{
/**
* @return mixed|void
*/
public function draw()
{
echo "画一个 {$this->color->run()} 的三角形";
}
}
================================================
FILE: Bridge/Yellow.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Bridge;
/**
* 黄色
*
* Class Yellow
* @package Baijunyao\DesignPatterns\Bridge
*/
class Yellow extends Color
{
/**
* @return mixed|string
*/
public function run()
{
return '黄色';
}
}
================================================
FILE: Bridge/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Bridge;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\Bridge
*/
class Client
{
/**
* 运行
*/
public function run()
{
$red = new Red();
$yellow = new Yellow();
$green = new Green();
// 红色的正方形
$redSquare = new Square($red);
$redSquare->draw();
echo '<hr>';
// 黄色的正方形
$yellowSquare = new Square($yellow);
$yellowSquare->draw();
echo '<hr>';
// 绿色的正方形
$greenSquare = new Square($green);
$greenSquare->draw();
echo '<hr>';
// 红色的三角形
$redTriangle = new Triangle($red);
$redTriangle->draw();
echo '<hr>';
// 黄色的三角形
$yellowTriangle = new Triangle($yellow);
$yellowTriangle->draw();
echo '<hr>';
// 绿色的三角形
$greenTriangle = new Triangle($green);
$greenTriangle->draw();
echo '<hr>';
// 红色的圆形
$redCircle = new Circle($red);
$redCircle->draw();
echo '<hr>';
// 黄色的圆形
$yellowCircle = new Circle($yellow);
$yellowCircle->draw();
echo '<hr>';
// 绿色的圆形
$greenCircle = new Circle($green);
$greenCircle->draw();
echo '<hr>';
}
}
$client = new Client();
$client->run();
================================================
FILE: ClassAdapter/Adaptee.php
================================================
<?php
namespace Baijunyao\DesignPatterns\ClassAdapter;
/**
* 源类
*
* Class Target
* @package Baijunyao\DesignPatterns\ClassAdapter
*/
class Adaptee
{
/**
* 金额
*
* @var string
*/
public $money = '¥34';
/**
* 支付
*/
public function pay()
{
echo '支付' . $this->money;
}
}
================================================
FILE: ClassAdapter/Adapter.php
================================================
<?php
namespace Baijunyao\DesignPatterns\ClassAdapter;
/**
* 适配器
*
* Class Adapter
* @package Baijunyao\DesignPatterns\ClassAdapter
*/
class Adapter extends Adaptee implements Target
{
/**
* Adapter constructor.
*/
public function __construct()
{
$this->money = '$5';
}
/**
* 通知
*/
public function notify()
{
echo '通知';
}
}
================================================
FILE: ClassAdapter/Target.php
================================================
<?php
namespace Baijunyao\DesignPatterns\ClassAdapter;
/**
* 目标类接口
*
* Interface Target
* @package Baijunyao\DesignPatterns\ClassAdapter
*/
interface Target
{
/**
* 支付
*
* @return mixed
*/
public function pay();
/**
* 通知
*
* @return mixed
*/
public function notify();
}
================================================
FILE: ClassAdapter/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\ClassAdapter;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\ClassAdapter
*/
class Client
{
/**
* 运行
*/
public function run()
{
// 原本的类的
$adaptee = new Adaptee();
$adaptee->pay();
echo '<br>';
// 适配器
$adapter = new Adapter();
$adapter->pay();
echo '<br>';
$adapter->notify();
}
}
$client = new Client();
$client->run();
================================================
FILE: Command/Command.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Command;
/**
* 具体命令类
*
* @package Baijunyao\DesignPatterns\Command
*/
class Command implements CommandInterface
{
/**
* @var \Baijunyao\DesignPatterns\Command\Receiver
*/
protected $receiver;
/**
* Command constructor.
*
* @param \Baijunyao\DesignPatterns\Command\Receiver $receiver
*/
public function __construct(Receiver $receiver)
{
$this->receiver = $receiver;
}
/**
* @return mixed|void
*/
public function execute()
{
$this->receiver->action();
}
}
================================================
FILE: Command/CommandInterface.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Command;
/**
* 命令接口
*
* @package Baijunyao\DesignPatterns\Command
*/
interface CommandInterface
{
/**
* @return mixed
*/
public function execute();
}
================================================
FILE: Command/Invoker.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Command;
/**
* 命令发送者
*
* @package Baijunyao\DesignPatterns\Command
*/
class Invoker
{
/**
* @var
*/
protected $command;
/**
* @param \Baijunyao\DesignPatterns\Command\Command $command
*/
public function setCommand(Command $command)
{
$this->command = $command;
}
/**
* 执行
*/
public function run()
{
$this->command->execute();
}
}
================================================
FILE: Command/Receiver.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Command;
/**
* 命令接收者
*
* @package Baijunyao\DesignPatterns\Command
*/
class Receiver
{
/**
* 执行操作
*/
public function action()
{
echo '执行操作';
}
}
================================================
FILE: Command/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Command;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\Command
*/
class Client
{
/**
* 运行
*/
public function run()
{
// 命令行类设定接受者
$receiver = new Receiver();
$command = new Command($receiver);
// 命令接受者调用命令
$invoker = new Invoker();
$invoker->setCommand($command);
$invoker->run();
}
}
$client = new Client();
$client->run();
================================================
FILE: Decorator/Decorator.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Decorator;
/**
* 装饰 配料
*
* Class Decorator
* @package Baijunyao\DesignPatterns\Decorator
*/
abstract class Decorator implements Food
{
/**
* @var Food
*/
protected $food;
/**
* Decorator constructor.
* @param Food $food
*/
public function __construct(Food $food)
{
$this->food = $food;
}
}
================================================
FILE: Decorator/Egg.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Decorator;
/**
* 蛋
*
* Class Egg
* @package Baijunyao\DesignPatterns\Decorator
*/
class Egg extends Decorator
{
/**
* 名称
*
* @return mixed|string
*/
public function name()
{
return $this->food->name() . '+蛋';
}
/**
* 价格
*
* @return int|mixed
*/
public function price()
{
return $this->food->price() + 1;
}
}
================================================
FILE: Decorator/Food.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Decorator;
/**
* 食物
*
* Interface Food
* @package Baijunyao\DesignPatterns\Decorator
*/
interface Food
{
/**
* 名称
*
* @return mixed
*/
public function name();
/**
* 价格
*
* @return mixed
*/
public function price();
}
================================================
FILE: Decorator/Kaolengmian.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Decorator;
/**
* 烤冷面
*
* Class Kaolengmian
* @package Baijunyao\DesignPatterns\Decorator
*/
class Kaolengmian implements Food
{
/**
* 名称
*
* @return mixed|string
*/
public function name()
{
return '烤冷面';
}
/**
* 价格
*
* @return int|mixed
*/
public function price()
{
return 6;
}
}
================================================
FILE: Decorator/Latiao.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Decorator;
/**
* 辣条
*
* Class Latiao
* @package Baijunyao\DesignPatterns\Decorator
*/
class Latiao extends Decorator
{
/**
* 名称
*
* @return mixed|string
*/
public function name()
{
return $this->food->name() . '+辣条';
}
/**
* 价格
*
* @return int|mixed
*/
public function price()
{
return $this->food->price() + 3;
}
}
================================================
FILE: Decorator/Sausage.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Decorator;
/**
* 肠
*
* Class Sausage
* @package Baijunyao\DesignPatterns\Decorator
*/
class Sausage extends Decorator
{
/**
* 名称
*
* @return mixed|string
*/
public function name()
{
return $this->food->name() . '+肠';
}
/**
* 价格
*
* @return int|mixed
*/
public function price()
{
return $this->food->price() + 2;
}
}
================================================
FILE: Decorator/Shouzhuabing.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Decorator;
/**
* 手抓饼
*
* Class Shouzhuabing
* @package Baijunyao\DesignPatterns\Decorator
*/
class Shouzhuabing implements Food
{
/**
* 名称
*
* @return mixed|string
*/
public function name()
{
return '手抓饼';
}
/**
* 价格
*
* @return int|mixed
*/
public function price()
{
return 5;
}
}
================================================
FILE: Decorator/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Decorator;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\Decorator
*/
class Client
{
/**
*
*/
public function run()
{
// 手抓饼
$shouzhuabing = new Shouzhuabing();
echo $shouzhuabing->name();
echo $shouzhuabing->price() . '元';
echo '<hr>';
// 烤冷面
$kaolengmian = new Kaolengmian();
echo $kaolengmian->name();
echo $kaolengmian->price() . '元';
echo '<hr>';
// 手抓饼+蛋
$egg = new Egg($shouzhuabing);
echo $egg->name();
echo $egg->price() . '元';
echo '<hr>';
// 手抓饼+肠
$sausage = new Sausage($kaolengmian);
echo $sausage->name();
echo $sausage->price() . '元';
echo '<hr>';
// 烤冷面+辣条
$latiao = new Latiao($shouzhuabing);
echo $latiao->name();
echo $latiao->price() . '元';
echo '<hr>';
}
}
$client = new Client();
$client->run();
================================================
FILE: Facade/Encrypt.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Facade;
/**
* 加密类
*
* @package Baijunyao\DesignPatterns\Facade
*/
class Encrypt
{
/**
* 加密
*/
public function encrypt()
{
return '加密';
}
}
================================================
FILE: Facade/Facade.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Facade;
/**
* Facade
*
* @package Baijunyao\DesignPatterns\Facade
*/
class Facade
{
/**
* @var \Baijunyao\DesignPatterns\Facade\File
*/
private $file;
/**
* @var \Baijunyao\DesignPatterns\Facade\Encrypt
*/
private $encrypt;
/**
* Facade constructor.
*/
public function __construct()
{
$this->file = new File();
$this->encrypt = new Encrypt();
}
/**
* 获取文件内容并加密
*/
public function encryptContent()
{
echo $this->file->content();
echo '<br>';
echo $this->encrypt->encrypt();
}
}
================================================
FILE: Facade/File.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Facade;
/**
* 文件类
*
* @package Baijunyao\DesignPatterns\Facade
*/
class File
{
/**
* 获取文件内容
*/
public function content()
{
return '获取文件内容';
}
}
================================================
FILE: Facade/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Facade;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\Facade
*/
class Client
{
/**
* 运行
*/
public function run()
{
$facade = new Facade();
$facade->encryptContent();
}
}
$client = new Client();
$client->run();
================================================
FILE: FactoryMethod/Add.php
================================================
<?php
namespace Baijunyao\DesignPatterns\FactoryMethod;
/**
* 加法
*
* Class Add
* @package Baijunyao\DesignPatterns\FactoryMethod
*/
class Add extends Operation
{
/**
* 计算结果
*
* @return int
*/
public function getResult()
{
return $this->numberA + $this->numberB;
}
}
================================================
FILE: FactoryMethod/AddFactory.php
================================================
<?php
namespace Baijunyao\DesignPatterns\FactoryMethod;
/**
* 加法工厂
*
* Class AddFactory
* @package Baijunyao\DesignPatterns\FactoryMethod
*/
class AddFactory extends Factory
{
/**
* 创建加法产品类
*
* @return Add
*/
public function create()
{
return new Add();
}
}
================================================
FILE: FactoryMethod/Div.php
================================================
<?php
namespace Baijunyao\DesignPatterns\FactoryMethod;
/**
* 除法
*
* Class Div
* @package Baijunyao\DesignPatterns\FactoryMethod
*/
class Div extends Operation
{
/**
* 计算结果
*
* @return float|int
*/
public function getResult()
{
if ($this->numberB == 0) {
throw new \InvalidArgumentException('除数不能为0');
}
return $this->numberA / $this->numberB;
}
}
================================================
FILE: FactoryMethod/DivFactory.php
================================================
<?php
namespace Baijunyao\DesignPatterns\FactoryMethod;
/**
* 除法工厂
*
* Class DivFactory
* @package Baijunyao\DesignPatterns\FactoryMethod
*/
class DivFactory extends Factory
{
/**
* 创建除法产品类
*
* @return Div
*/
public function create()
{
return new Div();
}
}
================================================
FILE: FactoryMethod/Factory.php
================================================
<?php
namespace Baijunyao\DesignPatterns\FactoryMethod;
/**
* 工厂抽象类
*
* Class Factory
* @package Baijunyao\DesignPatterns\FactoryMethod
*/
abstract class Factory
{
/**
* 创建产品
*
* @return mixed
*/
abstract public function create();
}
================================================
FILE: FactoryMethod/Mul.php
================================================
<?php
namespace Baijunyao\DesignPatterns\FactoryMethod;
/**
* 乘法
*
* Class Mul
* @package Baijunyao\DesignPatterns\FactoryMethod
*/
class Mul extends Operation
{
/**
* 计算结果
*
* @return float|int
*/
public function getResult()
{
return $this->numberA * $this->numberB;
}
}
================================================
FILE: FactoryMethod/MulFactory.php
================================================
<?php
namespace Baijunyao\DesignPatterns\FactoryMethod;
/**
* 乘法工厂
*
* Class MulFactory
* @package Baijunyao\DesignPatterns\FactoryMethod
*/
class MulFactory extends Factory
{
/**
* 创建乘法产品类
*
* @return Mul
*/
public function create()
{
return new Mul();
}
}
================================================
FILE: FactoryMethod/Operation.php
================================================
<?php
namespace Baijunyao\DesignPatterns\FactoryMethod;
/**
* 操作类型抽象类
*
* Class Operation
* @package Baijunyao\DesignPatterns\FactoryMethod
*/
abstract class Operation
{
/**
* 运算符号左边的值
*
* @var int
*/
protected $numberA = 0;
/**
* 运算符号右边的值
*
* @var int
*/
protected $numberB = 0;
/**
* 计算结果
*
* @return mixed
*/
abstract public function getResult();
/**
* 给 numberA 赋值
*
* @param $number
*/
public function setNumberA($number)
{
$this->numberA = $number;
}
/**
* 给 numberB 赋值
*
* @param $number
*/
public function setNumberB($number)
{
$this->numberB = $number;
}
}
================================================
FILE: FactoryMethod/Sub.php
================================================
<?php
namespace Baijunyao\DesignPatterns\FactoryMethod;
/**
* 减法
*
* Class Sub
* @package Baijunyao\DesignPatterns\FactoryMethod
*/
class Sub extends Operation
{
/**
* 计算结果
*
* @return int|mixed
*/
public function getResult()
{
return $this->numberA - $this->numberB;
}
}
================================================
FILE: FactoryMethod/SubFactory.php
================================================
<?php
namespace Baijunyao\DesignPatterns\FactoryMethod;
/**
* 减法工厂
*
* Class SubFactory
* @package Baijunyao\DesignPatterns\FactoryMethod
*/
class SubFactory extends Factory
{
/**
* 创建减法产品类
*
* @return Sub
*/
public function create()
{
return new Sub();
}
}
================================================
FILE: FactoryMethod/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\FactoryMethod;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\FactoryMethod
*/
class Client
{
/**
* 不好的示例 直接 new 具体的产品
*/
public function bad()
{
// 计算 1+2
$operation = new Add();
$operation->setNumberA(1);
$operation->setNumberB(2);
$result = $operation->getResult();
echo $result;
echo '<br>';
// 计算 3+4
$operation = new Add();
$operation->setNumberA(3);
$operation->setNumberB(4);
$result = $operation->getResult();
echo $result;
}
/**
* 好的示例 new 产品对应的工厂
*/
public function good()
{
$factory = new AddFactory();
$operation = $factory->create();
$operation->setNumberA(1);
$operation->setNumberB(2);
$result = $operation->getResult();
echo $result;
}
}
$client = new Client();
$client->bad();
echo '<br>';
$client->good();
================================================
FILE: Flyweight/ConcreteFlyweight.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Flyweight;
/**
* 共享的具体享元类
*
* Class ConcreteFlyweight
*
* @package Baijunyao\DesignPatterns\Flyweight
*/
class ConcreteFlyweight extends Flyweight
{
/**
* @param $content
*/
public function show($content)
{
echo '共享的享元:' . $this->name . $content . '<br>';
}
}
================================================
FILE: Flyweight/Flyweight.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Flyweight;
/**
* 享元抽象类
*
* Class Flyweight
*
* @package Baijunyao\DesignPatterns\Flyweight
*/
abstract class Flyweight
{
/**
* @var
*/
protected $name;
/**
* Flyweight constructor.
*
* @param $name
*/
public function __construct($name)
{
$this->name = $name;
}
/**
* @param $content
*/
public function show($content){}
}
================================================
FILE: Flyweight/FlyweightFactory.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Flyweight;
/**
* 享元工厂
*
* Class FlyweightFactory
*
* @package Baijunyao\DesignPatterns\Flyweight
*/
class FlyweightFactory
{
/**
* @var array
*/
private $flyweights = [];
/**
* @param $name
*
* @return mixed
*/
public function getFlyweight($name)
{
if(!isset($this->flyweights[$name])){
$this->flyweights[$name]=new ConcreteFlyweight($name);
}
return $this->flyweights[$name];
}
}
================================================
FILE: Flyweight/UnsharedConcreteFlyweight.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Flyweight;
/**
* 不共享的具体享元类
*
* Class UnsharedConcreteFlyweight
*
* @package Baijunyao\DesignPatterns\Flyweight
*/
class UnsharedConcreteFlyweight extends Flyweight
{
/**
* @param $content
*/
public function show($content)
{
echo '不共享的享元:' . $this->name . $content . '<br>';
}
/**
* 附加的删除方法
*/
public function delete()
{
$this->name = '';
}
}
================================================
FILE: Flyweight/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Flyweight;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\Flyweight
*/
class Client
{
/**
* 运行
*/
public function run()
{
$flyweight = new FlyweightFactory();
$zhangsan1 = $flyweight->getFlyweight('170cm的模特');
$zhangsan1->show('第1件L号的衣服');
$zhangsan2 = $flyweight->getFlyweight('170cm的模特');
$zhangsan2->show('第99件L号的衣服');
var_dump($zhangsan1 === $zhangsan2);
echo '<hr>';
$lisi = $flyweight->getFlyweight('180cm的模特');
$lisi->show('第1件XXL号的衣服');
$wangmazi = new UnsharedConcreteFlyweight('190cm的模特');
$wangmazi->show('第1件XXXL号的衣服');
$wangmazi->delete();
$wangmazi->show('第1件XXXL号的衣服');
}
}
$client = new Client();
$client->run();
================================================
FILE: Iterator/ContainerInterface.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Iterator;
/**
* 容器接口
*
* @package Baijunyao\DesignPatterns\Iterator
*/
interface ContainerInterface
{
/**
* 增加一个名字
*
* @param $name
*
* @return mixed
*/
public function add($name);
/**
* 获取迭代器
*
* @return mixed
*/
public function getIterator();
}
================================================
FILE: Iterator/IteratorInterface.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Iterator;
/**
* 迭代器接口
*
* @package Baijunyao\DesignPatterns\Iterator
*/
interface IteratorInterface
{
/**
* 判断是否还有下一个
*
* @return mixed
*/
public function hasNext();
/**
* 获取下一个
*
* @return mixed
*/
public function next();
}
================================================
FILE: Iterator/NameContainer.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Iterator;
/**
* 姓名容器
*
* @package Baijunyao\DesignPatterns\Iterator
*/
class NameContainer implements ContainerInterface
{
/**
* @var array
*/
protected $nameArray = [];
/**
* 增加一个名字
*
* @param $name
*
* @return mixed|void
*/
public function add($name)
{
$this->nameArray[] = $name;
}
/**
* 获取迭代器
*
* @return \Baijunyao\DesignPatterns\Iterator\NameIterator|mixed
*/
public function getIterator()
{
return new NameIterator($this->nameArray);
}
}
================================================
FILE: Iterator/NameIterator.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Iterator;
/**
* 姓名迭代器
*
* @package Baijunyao\DesignPatterns\Iterator
*/
class NameIterator implements IteratorInterface
{
/**
* @var array
*/
protected $nameArray = [];
/**
* @var int
*/
protected $index = 0;
/**
* NameIterator constructor.
*
* @param $nameArray
*/
public function __construct($nameArray)
{
$this->nameArray = $nameArray;
}
/**
* 判断是否还有下一个姓名
*
* @return bool|mixed
*/
public function hasNext()
{
return $this->index < count($this->nameArray);
}
/**
* 下一个姓名
*
* @return mixed|void
*/
public function next()
{
if ($this->hasNext()) {
echo $this->nameArray[$this->index] . '<br>';
$this->index++;
}
}
}
================================================
FILE: Iterator/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Iterator;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\Iterator
*/
class Client
{
/**
* 运行
*/
public function run()
{
$nameContainer = new NameContainer();
$nameContainer->add('张三');
$nameContainer->add('李四');
$nameContainer->add('王麻子');
$nameIterator = $nameContainer->getIterator();
while ($nameIterator->hasNext()) {
echo $nameIterator->next();
}
}
}
$client = new Client();
$client->run();
================================================
FILE: ObjectAdapter/Adaptee.php
================================================
<?php
namespace Baijunyao\DesignPatterns\ObjectAdapter;
/**
* 源类
*
* Class Target
* @package Baijunyao\DesignPatterns\ObjectAdapter
*/
class Adaptee
{
/**
* 金额
*
* @var string
*/
public $money = '¥34';
/**
* 支付
*/
public function pay()
{
echo '支付' . $this->money;
}
}
================================================
FILE: ObjectAdapter/Adapter.php
================================================
<?php
namespace Baijunyao\DesignPatterns\ObjectAdapter;
/**
* 适配器
*
* Class Adapter
* @package Baijunyao\DesignPatterns\ObjectAdapter
*/
class Adapter implements Target
{
/**
* Adapter constructor.
* @param Adaptee $adaptee
*/
public function __construct(Adaptee $adaptee)
{
$this->adaptee = $adaptee;
$adaptee->money = '$5';
}
/**
* 支付
*
* @return mixed|void
*/
public function pay()
{
$this->adaptee->pay();
}
/**
* 通知
*
* @return mixed|void
*/
public function notify()
{
echo '通知';
}
}
================================================
FILE: ObjectAdapter/Target.php
================================================
<?php
namespace Baijunyao\DesignPatterns\ObjectAdapter;
/**
* 目标类接口
*
* Interface Target
* @package Baijunyao\DesignPatterns\ObjectAdapter
*/
interface Target
{
/**
* 支付
*
* @return mixed
*/
public function pay();
/**
* 通知
*
* @return mixed
*/
public function notify();
}
================================================
FILE: ObjectAdapter/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\ObjectAdapter;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\ObjectAdapter
*/
class Client
{
/**
* 运行
*/
public function run()
{
// 原本的类的
$adaptee = new Adaptee();
$adaptee->pay();
echo '<br>';
// 适配器
$adapter = new Adapter($adaptee);
$adapter->pay();
echo '<br>';
$adapter->notify();
}
}
$client = new Client();
$client->run();
================================================
FILE: Observer/EmailObserver.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Observer;
/**
* 发邮件
*
* @package Baijunyao\DesignPatterns\Observer
*/
class EmailObserver implements Observer
{
/**
* 执行操作
*/
public function update()
{
echo '发送邮件昭告天下<br>';
}
}
================================================
FILE: Observer/Observer.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Observer;
/**
* Observer 接口
*
* @package Baijunyao\DesignPatterns\Observer
*/
interface Observer
{
/**
* @return mixed
*/
public function update();
}
================================================
FILE: Observer/SMSObserver.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Observer;
/**
* 发短信
*
* @package Baijunyao\DesignPatterns\Observer
*/
class SMSObserver implements Observer
{
/**
* 执行操作
*/
public function update()
{
echo '发送短信昭告天下<br>';
}
}
================================================
FILE: Observer/Subject.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Observer;
/**
* 具体 Subject
*
* @package Baijunyao\DesignPatterns\Observer
*/
class Subject extends SubjectAbstract
{
public function publish()
{
echo '我做了某事<br>';
$this->notify();
}
}
================================================
FILE: Observer/SubjectAbstract.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Observer;
/**
* Observer 抽象类
*
* @package Baijunyao\DesignPatterns\Observer
*/
abstract class SubjectAbstract
{
/**
* @var array
*/
private $observers = [];
/**
* @param \Baijunyao\DesignPatterns\Observer\Observer $observer
*/
public function attach(Observer $observer)
{
$this->observers[] = $observer;
}
/**
* 通知
*/
public function notify()
{
foreach ($this->observers as $k => $v) {
$v->update();
}
}
}
================================================
FILE: Observer/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Observer;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\Observer
*/
class Client
{
/**
* 运行
*/
public function run()
{
$emailObserver = new EmailObserver();
$SMSObserver = new SMSObserver();
$subject = new Subject();
$subject->attach($emailObserver);
$subject->attach($SMSObserver);
$subject->publish();
}
}
$client = new Client();
$client->run();
================================================
FILE: Prototype/Car.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Prototype;
/**
* Class Car
* @package Baijunyao\DesignPatterns\Prototype
*/
class Car
{
/**
* 车名
*
* @var
*/
public $name;
/**
* 设置车名
*
* @param $name
*/
public function setName($name)
{
$this->name = $name;
}
}
================================================
FILE: Prototype/DeepDrive.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Prototype;
/**
* Class DeepDrive
* @package Baijunyao\DesignPatterns\Prototype
*/
class DeepDrive
{
private $car;
/**
* Drive constructor.
*/
public function __construct()
{
echo '准备完成';
}
/**
* 选择要开的车
*
* @param $car
*/
public function setCar($car)
{
$this->car = $car;
}
public function show()
{
echo '开始驾驶'.$this->car->name;
echo '<br>';
}
public function __clone()
{
$this->car = clone $this->car;
}
}
================================================
FILE: Prototype/ShallowDrive.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Prototype;
/**
* Class ShallowDrive
* @package Baijunyao\DesignPatterns\Prototype
*/
class ShallowDrive
{
private $car;
/**
* Drive constructor.
*/
public function __construct()
{
echo '准备完成';
}
/**
* 选择要开的车
*
* @param $car
*/
public function setCar($car)
{
$this->car = $car;
}
public function show()
{
echo '开始驾驶'.$this->car->name;
echo '<br>';
}
}
================================================
FILE: Prototype/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Prototype;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\Prototype
*/
class Client
{
/**
* 浅复制
*/
public function shallowCopy()
{
$car = new Car();
$car->name = '特斯拉';
$shallowDrive = new ShallowDrive();
$shallowDrive->setCar($car);
$shallowDrive->show();
$cloneDrive = clone $shallowDrive;
$cloneDrive->show();
echo '<hr>';
$car->name = '凯迪拉克';
$shallowDrive->show();
$cloneDrive->show();
}
/**
*
*/
public function deepCopy()
{
$car = new Car();
$car->name = '特斯拉';
$deepDrive = new DeepDrive();
$deepDrive->setCar($car);
$deepDrive->show();
$cloneDrive = clone $deepDrive;
$cloneDrive->show();
echo '<hr>';
$car->name = '凯迪拉克';
$deepDrive->show();
$cloneDrive->show();
}
}
$client = new Client();
$client->shallowCopy();
echo '<br>-----------------------------<br>';
$client->deepCopy();
================================================
FILE: Proxy/Proxy.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Proxy;
/**
* 代理
*
* Class Proxy
*
* @package Baijunyao\DesignPatterns\Proxy
*/
class Proxy implements Subject
{
/**
* 真实主题
*
* @var \Baijunyao\DesignPatterns\Proxy\RealSubject
*/
protected $realSubject;
/**
* Proxy constructor.
*/
public function __construct()
{
$this->realSubject = new RealSubject();
}
/*
* 执行操作
*/
public function action()
{
$this->realSubject->action();
}
}
================================================
FILE: Proxy/RealSubject.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Proxy;
/**
* 真实主题
*
* Class RealSubject
*
* @package Baijunyao\DesignPatterns\Proxy
*/
class RealSubject implements Subject
{
/**
* 执行操作
*/
public function action()
{
echo '执行操作';
}
}
================================================
FILE: Proxy/Subject.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Proxy;
/**
*
*
* Interface Subject
*
* @package Baijunyao\DesignPatterns\Proxy
*/
interface Subject
{
public function action();
}
================================================
FILE: Proxy/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Proxy;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\Proxy
*/
class Client
{
/**
* 运行
*/
public function run()
{
$proxy = new Proxy();
$proxy->action();
}
}
$client = new Client();
$client->run();
================================================
FILE: SafeComposite/Component.php
================================================
<?php
namespace Baijunyao\DesignPatterns\SafeComposite;
/**
* 只包含树枝节点和叶子节点公共的方法抽象类
*
* Class Component
* @package Baijunyao\DesignPatterns\SafeComposite
*/
abstract class Component
{
/**
* @var
*/
protected $name;
/**
* Component constructor.
* @param $name
*/
public function __construct($name)
{
$this->name = $name;
}
/**
* @return mixed
*/
abstract public function display();
}
================================================
FILE: SafeComposite/Dir.php
================================================
<?php
namespace Baijunyao\DesignPatterns\SafeComposite;
/**
* 文件夹
*
* Class Dir
* @package Baijunyao\DesignPatterns\SafeComposite
*/
class Dir extends Component
{
/**
* @var array
*/
protected $children = [];
/**
* 添加子节点
*
* @param Component $component
*/
public function add(Component $component)
{
$this->children[] = $component;
}
/**
* @return mixed|string
*/
public function display()
{
$nameStr = $this->name .'<br>';
foreach ($this->children as $k => $v) {
$nameStr .= '--' . $v->display();
}
return $nameStr;
}
}
================================================
FILE: SafeComposite/File.php
================================================
<?php
namespace Baijunyao\DesignPatterns\SafeComposite;
/**
* 文件
*
* Class File
* @package Baijunyao\DesignPatterns\SafeComposite
*/
class File extends Component
{
/**
* @return mixed|string
*/
public function display()
{
return '--' . $this->name .'<br>';
}
}
================================================
FILE: SafeComposite/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\SafeComposite;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\SafeComposite
*/
class Client
{
/**
* 运行
*/
public function run()
{
$designPatterns = new Dir('design-patterns');
$classAdapter = new Dir('ClassAdapter');
$objectAdapter = new Dir('ObjectAdapter');
$safeComposite = new Dir('SafeComposite');
$designPatterns->add($classAdapter);
$designPatterns->add($objectAdapter);
$designPatterns->add($safeComposite);
$componentFile = new File('Component.php');
$dirFile = new File('Dir.php');
$fileFile = new File('File.php');
$indexFile = new File('index.php');
$safeComposite->add($componentFile);
$safeComposite->add($dirFile);
$safeComposite->add($fileFile);
$safeComposite->add($indexFile);
echo $designPatterns->display();
}
}
$client = new Client();
$client->run();
================================================
FILE: SimpleFactory/Add.php
================================================
<?php
namespace Baijunyao\DesignPatterns\SimpleFactory;
/**
* 加法
*
* Class Add
* @package Baijunyao\DesignPatterns\SimpleFactory
*/
class Add extends Operation
{
/**
* 计算结果
*
* @return int
*/
public function getResult()
{
return $this->numberA + $this->numberB;
}
}
================================================
FILE: SimpleFactory/Bad.php
================================================
<?php
namespace Baijunyao\DesignPatterns\SimpleFactory;
/**
* 不好的示例
*
* Class Bad
* @package Baijunyao\DesignPatterns\SimpleFactory
*/
class Bad
{
/**
* 计算结果
*
* @param int $numberA
* @param string $operate
* @param int $numberB
* @return int|float|int
*/
public function getResult($numberA, $operate, $numberB)
{
switch ($operate) {
case '+':
$result = $numberA + $numberB;
break;
case '-':
$result = $numberA - $numberB;
break;
case '*':
$result = $numberA * $numberB;
break;
case '/':
if ($numberB != 0) {
$result = $numberA / $numberB;
} else {
throw new \InvalidArgumentException('除数不能为0');
}
break;
default:
throw new \InvalidArgumentException('暂不支持的运算');
}
return $result;
}
}
================================================
FILE: SimpleFactory/Div.php
================================================
<?php
namespace Baijunyao\DesignPatterns\SimpleFactory;
/**
* 除法
*
* Class Div
* @package Baijunyao\DesignPatterns\SimpleFactory
*/
class Div extends Operation
{
/**
* 计算结果
*
* @return float|int
*/
public function getResult()
{
if ($this->numberB == 0) {
throw new \InvalidArgumentException('除数不能为0');
}
return $this->numberA / $this->numberB;
}
}
================================================
FILE: SimpleFactory/Factory.php
================================================
<?php
namespace Baijunyao\DesignPatterns\SimpleFactory;
/**
* 工厂类
*
* Class Factory
* @package Baijunyao\DesignPatterns\SimpleFactory
*/
class Factory
{
/**
* 创建一种运算
*
* @param $operate
* @return Add|Div|Mul|Sub
*/
public function create($operate)
{
switch ($operate) {
case '+':
$result = new Add();
break;
case '-':
$result = new Sub();
break;
case '*':
$result = new Mul();
break;
case '/':
$result = new Div();
break;
default:
throw new \InvalidArgumentException('暂不支持的运算');
}
return $result;
}
}
================================================
FILE: SimpleFactory/Mul.php
================================================
<?php
namespace Baijunyao\DesignPatterns\SimpleFactory;
/**
* 乘法
*
* Class Mul
* @package Baijunyao\DesignPatterns\SimpleFactory
*/
class Mul extends Operation
{
/**
* 计算结果
*
* @return float|int
*/
public function getResult()
{
return $this->numberA * $this->numberB;
}
}
================================================
FILE: SimpleFactory/Operation.php
================================================
<?php
namespace Baijunyao\DesignPatterns\SimpleFactory;
/**
* 操作类型抽象类
*
* Class Operation
* @package Baijunyao\DesignPatterns\SimpleFactory
*/
abstract class Operation
{
/**
* 运算符号左边的值
*
* @var int
*/
protected $numberA = 0;
/**
* 运算符号右边的值
*
* @var int
*/
protected $numberB = 0;
/**
* 计算结果
*
* @return mixed
*/
abstract public function getResult();
/**
* 给 numberA 赋值
*
* @param $number
*/
public function setNumberA($number)
{
$this->numberA = $number;
}
/**
* 给 numberB 赋值
*
* @param $number
*/
public function setNumberB($number)
{
$this->numberB = $number;
}
}
================================================
FILE: SimpleFactory/Sub.php
================================================
<?php
namespace Baijunyao\DesignPatterns\SimpleFactory;
/**
* 减法
*
* Class Sub
* @package Baijunyao\DesignPatterns\SimpleFactory
*/
class Sub extends Operation
{
/**
* 计算结果
*
* @return int|mixed
*/
public function getResult()
{
return $this->numberA - $this->numberB;
}
}
================================================
FILE: SimpleFactory/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\SimpleFactory;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\SimpleFactory
*/
class Client
{
/**
* 不好的示例
*/
public function bad()
{
$program = new Bad();
$result = $program->getResult(1, '+', 2);
echo $result;
}
/**
* 不好的示例2
*
* @return int
*/
public function bad2()
{
// 计算 1+2
$operation = new Add();
$operation->setNumberA(1);
$operation->setNumberB(2);
$result = $operation->getResult();
echo $result;
echo '<br>';
// 计算 3+4
$operation = new Add();
$operation->setNumberA(3);
$operation->setNumberB(4);
$result = $operation->getResult();
echo $result;
}
/**
* 好的示例
*/
public function good()
{
$factory = new Factory();
$operation = $factory->create('+');
$operation->setNumberA(1);
$operation->setNumberB(2);
$result = $operation->getResult();
echo $result;
}
}
$client = new Client();
$client->bad();
echo '<br>';
$client->bad2();
echo '<br>';
$client->good();
================================================
FILE: Template/Huawei.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Template;
/**
* Class Huawei
*
* @package Baijunyao\DesignPatterns\Template
*/
class Huawei extends Phone
{
/**
* 打电话
*
* @return mixed|void
*/
protected function showLogo()
{
echo '华为logo'. '<br>';
}
}
================================================
FILE: Template/Phone.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Template;
/**
* Class Phone
*
* @package Baijunyao\DesignPatterns\Template
*/
abstract class Phone
{
/**
* 定义操作顺序
*/
final public function action()
{
$this->powerOn();
$this->showLogo();
$this->callUp();
}
/**
* 开机
*/
protected function powerOn()
{
echo '开机' . '<br>';
}
/**
* logo
*
* @return mixed
*/
abstract protected function showLogo();
/**
* 打电话
*/
protected function callUp()
{
echo '打电话' . '<br>';
}
}
================================================
FILE: Template/Xiaomi.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Template;
/**
* Class Xiaomi
*
* @package Baijunyao\DesignPatterns\Template
*/
class Xiaomi extends Phone
{
/**
* logo
*
* @return mixed|void
*/
protected function showLogo()
{
echo '小米logo'. '<br>';
}
}
================================================
FILE: Template/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Template;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\Template
*/
class Client
{
/**
* 运行
*/
public function run()
{
$xiaomi = new Xiaomi();
$xiaomi->action();
echo '<hr>';
$huawei = new Huawei();
$huawei->action();
}
}
$client = new Client();
$client->run();
================================================
FILE: TransparentComposite/Component.php
================================================
<?php
namespace Baijunyao\DesignPatterns\TransparentComposite;
/**
* 包含树枝节点和叶子节点方法的抽象类
*
* Class Component
* @package Baijunyao\DesignPatterns\TransparentComposite
*/
abstract class Component
{
/**
* @var
*/
protected $name;
/**
* Component constructor.
* @param $name
*/
public function __construct($name)
{
$this->name = $name;
}
/**
* 添加子节点
*
* @return mixed
*/
abstract public function add();
/**
* 展示名称
*
* @return mixed
*/
abstract public function display();
}
================================================
FILE: TransparentComposite/Dir.php
================================================
<?php
namespace Baijunyao\DesignPatterns\TransparentComposite;
/**
* 文件夹
*
* Class Dir
* @package Baijunyao\DesignPatterns\TransparentComposite
*/
class Dir extends Component
{
/**
* @var array
*/
protected $children = [];
/**
* 添加子节点
*
* @param Component $component
*/
public function add(Component $component)
{
$this->children[] = $component;
}
/**
* @return mixed|string
*/
public function display()
{
$nameStr = $this->name .'<br>';
foreach ($this->children as $k => $v) {
$nameStr .= '--' . $v->display();
}
return $nameStr;
}
}
================================================
FILE: TransparentComposite/File.php
================================================
<?php
namespace Baijunyao\DesignPatterns\TransparentComposite;
/**
* 文件
*
* Class File
* @package Baijunyao\DesignPatterns\TransparentComposite
*/
class File extends Component
{
/**
* @param Component $component
* @throws \Exception
*/
public function add(Component $component)
{
throw new \Exception('文件不能添加子节点');
}
/**
* @return mixed|string
*/
public function display()
{
return '--' . $this->name .'<br>';
}
}
================================================
FILE: TransparentComposite/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\TransparentComposite;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\TransparentComposite
*/
class Client
{
/**
* 运行
*/
public function run()
{
$designPatterns = new Dir('design-patterns');
$classAdapter = new Dir('ClassAdapter');
$objectAdapter = new Dir('ObjectAdapter');
$transparentComposite = new Dir('TransparentComposite');
$designPatterns->add($classAdapter);
$designPatterns->add($objectAdapter);
$designPatterns->add($transparentComposite);
$componentFile = new File('Component.php');
$dirFile = new File('Dir.php');
$fileFile = new File('File.php');
$indexFile = new File('index.php');
$transparentComposite->add($componentFile);
$transparentComposite->add($dirFile);
$transparentComposite->add($fileFile);
$transparentComposite->add($indexFile);
echo $designPatterns->display();
}
}
$client = new Client();
$client->run();
================================================
FILE: composer.json
================================================
{
"name": "baijunyao/design-patterns",
"description": "design patterns",
"type": "project",
"license": "MIT",
"authors": [
{
"name": "baijunyao",
"email": "baijunyao@baijunyao.com"
}
],
"require": {},
"autoload": {
"psr-4": {
"Baijunyao\\DesignPatterns\\": ""
}
}
}
================================================
FILE: index.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>设计模式-白俊遥</title>
</head>
<body marginheight="0">
<h3>文章</h3>
<ol>
<li><a href="https://baijunyao.com/article/158">php设计模式(一)序言</a></li>
<li><a href="https://baijunyao.com/article/159">php设计模式(二)单例模式</a></li>
<li><a href="https://baijunyao.com/article/161">php设计模式(三)简单工厂模式</a></li>
<li><a href="https://baijunyao.com/article/162">php设计模式(四)工厂方法模式</a></li>
<li><a href="https://baijunyao.com/article/164">php设计模式(五)抽象工厂模式</a></li>
<li><a href="https://baijunyao.com/article/165">php设计模式(六)使用简单工厂来优化抽象工厂模式</a></li>
<li><a href="https://baijunyao.com/article/166">php设计模式(七)使用反射来优化抽象工厂模式</a></li>
<li><a href="https://baijunyao.com/article/167">php设计模式(八)原型模式</a></li>
<li><a href="https://baijunyao.com/article/168">php设计模式(九)类适配器模式</a></li>
<li><a href="https://baijunyao.com/article/169">php设计模式(十)对象适配器模式</a></li>
<li><a href="https://baijunyao.com/article/170">php设计模式(十一)桥接模式</a></li>
<li><a href="https://baijunyao.com/article/172">php设计模式(十二)装饰模式</a></li>
<li><a href="https://baijunyao.com/article/174">php设计模式(十三)透明组合模式</a></li>
<li><a href="https://baijunyao.com/article/175">php设计模式(十四)安全组合模式</a></li>
<li><a href="https://baijunyao.com/article/176">php设计模式(十五)外观模式</a></li>
<li><a href="https://baijunyao.com/article/177">php设计模式(十六)享元模式</a></li>
<li><a href="https://baijunyao.com/article/178">php设计模式(十七)代理模式</a></li>
<li><a href="https://baijunyao.com/article/179">php设计模式(十八)代理模式</a></li>
<li><a href="https://baijunyao.com/article/182">php设计模式(十九)命令模式</a></li>
<li><a href="https://baijunyao.com/article/183">php设计模式(二十)迭代器模式</a></li>
<li><a href="https://baijunyao.com/article/184">php设计模式(二十一)观察者模式</a></li>
</ol>
<h3>目录</h3>
<ul>
<li><a href="/singleton">单例模式</a></li>
<li><a href="/SimpleFactory">简单工厂模式</a></li>
<li><a href="/FactoryMethod">工厂方法模式</a></li>
<li><a href="/AbstractFactory">抽象工厂模式</a></li>
<li><a href="/AbstractFactoryWithSimpleFactory">使用简单工厂来优化抽象工厂模式</a></li>
<li><a href="/AbstractFactoryWithReflection">使用反射来优化抽象工厂模式</a></li>
<li><a href="/Prototype">原型模式</a></li>
<li><a href="/ClassAdapter">类适配器</a></li>
<li><a href="/ObjectAdapter">对象适配器模式</a></li>
<li><a href="/Bridge">桥接模式</a></li>
<li><a href="/Decorator">装饰模式</a></li>
<li><a href="/TransparentComposite">透明组合模式</a></li>
<li><a href="/SafeComposite">安全组合模式</a></li>
<li><a href="/Facade">外观模式</a></li>
<li><a href="/Flyweight">享元模式</a></li>
<li><a href="/Proxy">代理模式</a></li>
<li><a href="/Template">代理模式</a></li>
<li><a href="/Command">命令模式</a></li>
<li><a href="/Iterator">迭代器模式</a></li>
<li><a href="/Observer">迭代器模式</a></li>
</ul>
</body>
</html>
================================================
FILE: readme.md
================================================
### 文章
1. [php设计模式(一)序言](https://baijunyao.com/article/158)
2. [php设计模式(二)单例模式](https://baijunyao.com/article/159)
3. [php设计模式(三)简单工厂模式](https://baijunyao.com/article/161)
4. [php设计模式(四)工厂方法模式](https://baijunyao.com/article/162)
5. [php设计模式(五)抽象工厂模式](https://baijunyao.com/article/164)
6. [php设计模式(六)使用简单工厂来优化抽象工厂模式](https://baijunyao.com/article/165)
7. [php设计模式(七)使用反射来优化抽象工厂模式](https://baijunyao.com/article/166)
8. [php设计模式(八)原型模式](https://baijunyao.com/article/167)
9. [php设计模式(九)类适配器模式](https://baijunyao.com/article/168)
10. [php设计模式(十)对象适配器模式](https://baijunyao.com/article/169)
11. [php设计模式(十一)桥接模式](https://baijunyao.com/article/170)
12. [php设计模式(十二)装饰模式](https://baijunyao.com/article/172)
13. [php设计模式(十三)透明组合模式](https://baijunyao.com/article/174)
14. [php设计模式(十四)安全组合模式](https://baijunyao.com/article/175)
15. [php设计模式(十五)外观模式](https://baijunyao.com/article/176)
16. [php设计模式(十六)享元模式](https://baijunyao.com/article/177)
17. [php设计模式(十七)代理模式](https://baijunyao.com/article/178)
18. [php设计模式(十八)模板方法模式](https://baijunyao.com/article/179)
19. [php设计模式(十九)命令模式](https://baijunyao.com/article/182)
20. [php设计模式(二十)迭代器模式](https://baijunyao.com/article/183)
21. [php设计模式(二十一)观察者模式](https://baijunyao.com/article/184)
### 目录
- [单例模式](https://github.com/baijunyao/design-patterns/tree/master/singleton)
- [简单工厂模式](https://github.com/baijunyao/design-patterns/tree/master/SimpleFactory)
- [工厂方法模式](https://github.com/baijunyao/design-patterns/tree/master/FactoryMethod)
- [抽象工厂模式](https://github.com/baijunyao/design-patterns/tree/master/AbstractFactory)
- [使用简单工厂来优化抽象工厂模式](https://github.com/baijunyao/design-patterns/tree/master/AbstractFactoryWithSimpleFactory)
- [使用反射来优化抽象工厂模式](https://github.com/baijunyao/design-patterns/tree/master/AbstractFactoryWithReflection)
- [原型模式](https://github.com/baijunyao/design-patterns/tree/master/Prototype)
- [类适配器模式](https://github.com/baijunyao/design-patterns/tree/master/ClassAdapter)
- [对象适配器模式](https://github.com/baijunyao/design-patterns/tree/master/ObjectAdapter)
- [桥接模式](https://github.com/baijunyao/design-patterns/tree/master/Bridge)
- [装饰模式](https://github.com/baijunyao/design-patterns/tree/master/Decorator)
- [透明组合模式](https://github.com/baijunyao/design-patterns/tree/master/TransparentComposite)
- [安全组合模式](https://github.com/baijunyao/design-patterns/tree/master/SafeComposite)
- [外观模式](https://github.com/baijunyao/design-patterns/tree/master/Facade)
- [享元模式](https://github.com/baijunyao/design-patterns/tree/master/Flyweight)
- [代理模式](https://github.com/baijunyao/design-patterns/tree/master/Proxy)
- [模板方法模式](https://github.com/baijunyao/design-patterns/tree/master/Template)
- [命令模式](https://github.com/baijunyao/design-patterns/tree/master/Command)
- [迭代器模式](https://github.com/baijunyao/design-patterns/tree/master/Iterator)
- [观察者模式](https://github.com/baijunyao/design-patterns/tree/master/Observer)
================================================
FILE: singleton/index.php
================================================
<?php
namespace Baijunyao\DesignPatterns\Singleton;
/**
* 普通类
*
* Class Db1
* @package Baijunyao\DesignPatterns\Singleton
*/
class Db1
{
public static $instance = null;
public static function getInstance()
{
if (null === static::$instance) {
static::$instance = new static();
}
return static::$instance;
}
public function __construct()
{
}
public function __clone()
{
}
public function __wakeup()
{
}
}
$db1 = new Db1();
$db2 = new Db1();
$db3 = clone $db2;
$db4 = Db1::getInstance();
$db5 = unserialize(serialize($db4));
var_dump($db1);
echo '<hr>';
var_dump($db2);
echo '<hr>';
var_dump($db3);
echo '<hr>';
var_dump($db4);
echo '<hr>';
var_dump($db5);
echo '<hr>';
/**
* 单例
*
* Class Db2
* @package Baijunyao\DesignPatterns\Singleton
*/
class Db2
{
private static $instance = null;
public static function getInstance()
{
if (null === static::$instance) {
static::$instance = new static();
}
return static::$instance;
}
/**
* 防止使用 new 创建多个实例
*
* Db2 constructor.
*/
private function __construct()
{
}
/**
* 防止 clone 多个实例
*/
private function __clone()
{
}
/**
* 防止反序列化
*/
private function __wakeup()
{
}
}
$db6 = Db2::getInstance();
$db7 = Db2::getInstance();
var_dump($db6);
echo '<hr>';
var_dump($db7);
echo '<hr>';
================================================
FILE: vendor/autoload.php
================================================
<?php
// autoload.php @generated by Composer
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit88798c90f3cb8871fa59cc0f15b5142f::getLoader();
================================================
FILE: vendor/composer/ClassLoader.php
================================================
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer\Autoload;
/**
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
*
* $loader = new \Composer\Autoload\ClassLoader();
*
* // register classes with namespaces
* $loader->add('Symfony\Component', __DIR__.'/component');
* $loader->add('Symfony', __DIR__.'/framework');
*
* // activate the autoloader
* $loader->register();
*
* // to enable searching the include path (eg. for PEAR packages)
* $loader->setUseIncludePath(true);
*
* In this example, if you try to use a class in the Symfony\Component
* namespace or one of its children (Symfony\Component\Console for instance),
* the autoloader will first look for the class under the component/
* directory, and it will then fallback to the framework/ directory if not
* found before giving up.
*
* This class is loosely based on the Symfony UniversalClassLoader.
*
* @author Fabien Potencier <fabien@symfony.com>
* @author Jordi Boggiano <j.boggiano@seld.be>
* @see http://www.php-fig.org/psr/psr-0/
* @see http://www.php-fig.org/psr/psr-4/
*/
class ClassLoader
{
// PSR-4
private $prefixLengthsPsr4 = array();
private $prefixDirsPsr4 = array();
private $fallbackDirsPsr4 = array();
// PSR-0
private $prefixesPsr0 = array();
private $fallbackDirsPsr0 = array();
private $useIncludePath = false;
private $classMap = array();
private $classMapAuthoritative = false;
private $missingClasses = array();
private $apcuPrefix;
public function getPrefixes()
{
if (!empty($this->prefixesPsr0)) {
return call_user_func_array('array_merge', $this->prefixesPsr0);
}
return array();
}
public function getPrefixesPsr4()
{
return $this->prefixDirsPsr4;
}
public function getFallbackDirs()
{
return $this->fallbackDirsPsr0;
}
public function getFallbackDirsPsr4()
{
return $this->fallbackDirsPsr4;
}
public function getClassMap()
{
return $this->classMap;
}
/**
* @param array $classMap Class to filename map
*/
public function addClassMap(array $classMap)
{
if ($this->classMap) {
$this->classMap = array_merge($this->classMap, $classMap);
} else {
$this->classMap = $classMap;
}
}
/**
* Registers a set of PSR-0 directories for a given prefix, either
* appending or prepending to the ones previously set for this prefix.
*
* @param string $prefix The prefix
* @param array|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
*/
public function add($prefix, $paths, $prepend = false)
{
if (!$prefix) {
if ($prepend) {
$this->fallbackDirsPsr0 = array_merge(
(array) $paths,
$this->fallbackDirsPsr0
);
} else {
$this->fallbackDirsPsr0 = array_merge(
$this->fallbackDirsPsr0,
(array) $paths
);
}
return;
}
$first = $prefix[0];
if (!isset($this->prefixesPsr0[$first][$prefix])) {
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
return;
}
if ($prepend) {
$this->prefixesPsr0[$first][$prefix] = array_merge(
(array) $paths,
$this->prefixesPsr0[$first][$prefix]
);
} else {
$this->prefixesPsr0[$first][$prefix] = array_merge(
$this->prefixesPsr0[$first][$prefix],
(array) $paths
);
}
}
/**
* Registers a set of PSR-4 directories for a given namespace, either
* appending or prepending to the ones previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
*
* @throws \InvalidArgumentException
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
if (!$prefix) {
// Register directories for the root namespace.
if ($prepend) {
$this->fallbackDirsPsr4 = array_merge(
(array) $paths,
$this->fallbackDirsPsr4
);
} else {
$this->fallbackDirsPsr4 = array_merge(
$this->fallbackDirsPsr4,
(array) $paths
);
}
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
// Register directories for a new namespace.
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
} elseif ($prepend) {
// Prepend directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
(array) $paths,
$this->prefixDirsPsr4[$prefix]
);
} else {
// Append directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
$this->prefixDirsPsr4[$prefix],
(array) $paths
);
}
}
/**
* Registers a set of PSR-0 directories for a given prefix,
* replacing any others previously set for this prefix.
*
* @param string $prefix The prefix
* @param array|string $paths The PSR-0 base directories
*/
public function set($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr0 = (array) $paths;
} else {
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
}
}
/**
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories
*
* @throws \InvalidArgumentException
*/
public function setPsr4($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr4 = (array) $paths;
} else {
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
}
}
/**
* Turns on searching the include path for class files.
*
* @param bool $useIncludePath
*/
public function setUseIncludePath($useIncludePath)
{
$this->useIncludePath = $useIncludePath;
}
/**
* Can be used to check if the autoloader uses the include path to check
* for classes.
*
* @return bool
*/
public function getUseIncludePath()
{
return $this->useIncludePath;
}
/**
* Turns off searching the prefix and fallback directories for classes
* that have not been registered with the class map.
*
* @param bool $classMapAuthoritative
*/
public function setClassMapAuthoritative($classMapAuthoritative)
{
$this->classMapAuthoritative = $classMapAuthoritative;
}
/**
* Should class lookup fail if not found in the current class map?
*
* @return bool
*/
public function isClassMapAuthoritative()
{
return $this->classMapAuthoritative;
}
/**
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
*
* @param string|null $apcuPrefix
*/
public function setApcuPrefix($apcuPrefix)
{
$this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
}
/**
* The APCu prefix in use, or null if APCu caching is not enabled.
*
* @return string|null
*/
public function getApcuPrefix()
{
return $this->apcuPrefix;
}
/**
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
*/
public function register($prepend = false)
{
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
}
/**
* Unregisters this instance as an autoloader.
*/
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
}
/**
* Loads the given class or interface.
*
* @param string $class The name of the class
* @return bool|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
includeFile($file);
return true;
}
}
/**
* Finds the path to the file where the class is defined.
*
* @param string $class The name of the class
*
* @return string|false The path if found, false otherwise
*/
public function findFile($class)
{
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
return false;
}
if (null !== $this->apcuPrefix) {
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
if ($hit) {
return $file;
}
}
$file = $this->findFileWithExtension($class, '.php');
// Search for Hack files if we are running on HHVM
if (false === $file && defined('HHVM_VERSION')) {
$file = $this->findFileWithExtension($class, '.hh');
}
if (null !== $this->apcuPrefix) {
apcu_add($this->apcuPrefix.$class, $file);
}
if (false === $file) {
// Remember that this class does not exist.
$this->missingClasses[$class] = true;
}
return $file;
}
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
$first = $class[0];
if (isset($this->prefixLengthsPsr4[$first])) {
$subPath = $class;
while (false !== $lastPos = strrpos($subPath, '\\')) {
$subPath = substr($subPath, 0, $lastPos);
$search = $subPath.'\\';
if (isset($this->prefixDirsPsr4[$search])) {
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
foreach ($this->prefixDirsPsr4[$search] as $dir) {
if (file_exists($file = $dir . $pathEnd)) {
return $file;
}
}
}
}
}
// PSR-4 fallback dirs
foreach ($this->fallbackDirsPsr4 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
return $file;
}
}
// PSR-0 lookup
if (false !== $pos = strrpos($class, '\\')) {
// namespaced class name
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
} else {
// PEAR-like class name
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
}
if (isset($this->prefixesPsr0[$first])) {
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
if (0 === strpos($class, $prefix)) {
foreach ($dirs as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
}
}
}
// PSR-0 fallback dirs
foreach ($this->fallbackDirsPsr0 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
// PSR-0 include paths.
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
return $file;
}
return false;
}
}
/**
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*/
function includeFile($file)
{
include $file;
}
================================================
FILE: vendor/composer/LICENSE
================================================
Copyright (c) Nils Adermann, Jordi Boggiano
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
================================================
FILE: vendor/composer/autoload_classmap.php
================================================
<?php
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
);
================================================
FILE: vendor/composer/autoload_namespaces.php
================================================
<?php
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
);
================================================
FILE: vendor/composer/autoload_psr4.php
================================================
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Baijunyao\\DesignPatterns\\' => array($baseDir . '/'),
);
================================================
FILE: vendor/composer/autoload_real.php
================================================
<?php
// autoload_real.php @generated by Composer
class ComposerAutoloaderInit88798c90f3cb8871fa59cc0f15b5142f
{
private static $loader;
public static function loadClassLoader($class)
{
if ('Composer\Autoload\ClassLoader' === $class) {
require __DIR__ . '/ClassLoader.php';
}
}
public static function getLoader()
{
if (null !== self::$loader) {
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInit88798c90f3cb8871fa59cc0f15b5142f', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
spl_autoload_unregister(array('ComposerAutoloaderInit88798c90f3cb8871fa59cc0f15b5142f', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require_once __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit88798c90f3cb8871fa59cc0f15b5142f::getInitializer($loader));
} else {
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
$loader->set($namespace, $path);
}
$map = require __DIR__ . '/autoload_psr4.php';
foreach ($map as $namespace => $path) {
$loader->setPsr4($namespace, $path);
}
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}
}
$loader->register(true);
return $loader;
}
}
================================================
FILE: vendor/composer/autoload_static.php
================================================
<?php
// autoload_static.php @generated by Composer
namespace Composer\Autoload;
class ComposerStaticInit88798c90f3cb8871fa59cc0f15b5142f
{
public static $prefixLengthsPsr4 = array (
'B' =>
array (
'Baijunyao\\DesignPatterns\\' => 25,
),
);
public static $prefixDirsPsr4 = array (
'Baijunyao\\DesignPatterns\\' =>
array (
0 => __DIR__ . '/../..' . '/',
),
);
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInit88798c90f3cb8871fa59cc0f15b5142f::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInit88798c90f3cb8871fa59cc0f15b5142f::$prefixDirsPsr4;
}, null, ClassLoader::class);
}
}
gitextract__6eyr3aa/
├── AbstractFactory/
│ ├── Article.php
│ ├── Factory.php
│ ├── MySQLArticle.php
│ ├── MySQLFactory.php
│ ├── MySQLUser.php
│ ├── SQLiteArticle.php
│ ├── SQLiteFactory.php
│ ├── SQLiteUser.php
│ ├── User.php
│ └── index.php
├── AbstractFactoryWithReflection/
│ ├── Article.php
│ ├── Factory.php
│ ├── MySQLArticle.php
│ ├── MySQLUser.php
│ ├── SQLiteArticle.php
│ ├── SQLiteUser.php
│ ├── User.php
│ ├── config.php
│ └── index.php
├── AbstractFactoryWithSimpleFactory/
│ ├── Article.php
│ ├── Factory.php
│ ├── MySQLArticle.php
│ ├── MySQLUser.php
│ ├── SQLiteArticle.php
│ ├── SQLiteUser.php
│ ├── User.php
│ ├── config.php
│ └── index.php
├── Bridge/
│ ├── Circle.php
│ ├── Color.php
│ ├── Graph.php
│ ├── Green.php
│ ├── Red.php
│ ├── Square.php
│ ├── Triangle.php
│ ├── Yellow.php
│ └── index.php
├── ClassAdapter/
│ ├── Adaptee.php
│ ├── Adapter.php
│ ├── Target.php
│ └── index.php
├── Command/
│ ├── Command.php
│ ├── CommandInterface.php
│ ├── Invoker.php
│ ├── Receiver.php
│ └── index.php
├── Decorator/
│ ├── Decorator.php
│ ├── Egg.php
│ ├── Food.php
│ ├── Kaolengmian.php
│ ├── Latiao.php
│ ├── Sausage.php
│ ├── Shouzhuabing.php
│ └── index.php
├── Facade/
│ ├── Encrypt.php
│ ├── Facade.php
│ ├── File.php
│ └── index.php
├── FactoryMethod/
│ ├── Add.php
│ ├── AddFactory.php
│ ├── Div.php
│ ├── DivFactory.php
│ ├── Factory.php
│ ├── Mul.php
│ ├── MulFactory.php
│ ├── Operation.php
│ ├── Sub.php
│ ├── SubFactory.php
│ └── index.php
├── Flyweight/
│ ├── ConcreteFlyweight.php
│ ├── Flyweight.php
│ ├── FlyweightFactory.php
│ ├── UnsharedConcreteFlyweight.php
│ └── index.php
├── Iterator/
│ ├── ContainerInterface.php
│ ├── IteratorInterface.php
│ ├── NameContainer.php
│ ├── NameIterator.php
│ └── index.php
├── ObjectAdapter/
│ ├── Adaptee.php
│ ├── Adapter.php
│ ├── Target.php
│ └── index.php
├── Observer/
│ ├── EmailObserver.php
│ ├── Observer.php
│ ├── SMSObserver.php
│ ├── Subject.php
│ ├── SubjectAbstract.php
│ └── index.php
├── Prototype/
│ ├── Car.php
│ ├── DeepDrive.php
│ ├── ShallowDrive.php
│ └── index.php
├── Proxy/
│ ├── Proxy.php
│ ├── RealSubject.php
│ ├── Subject.php
│ └── index.php
├── SafeComposite/
│ ├── Component.php
│ ├── Dir.php
│ ├── File.php
│ └── index.php
├── SimpleFactory/
│ ├── Add.php
│ ├── Bad.php
│ ├── Div.php
│ ├── Factory.php
│ ├── Mul.php
│ ├── Operation.php
│ ├── Sub.php
│ └── index.php
├── Template/
│ ├── Huawei.php
│ ├── Phone.php
│ ├── Xiaomi.php
│ └── index.php
├── TransparentComposite/
│ ├── Component.php
│ ├── Dir.php
│ ├── File.php
│ └── index.php
├── composer.json
├── index.html
├── readme.md
├── singleton/
│ └── index.php
└── vendor/
├── autoload.php
└── composer/
├── ClassLoader.php
├── LICENSE
├── autoload_classmap.php
├── autoload_namespaces.php
├── autoload_psr4.php
├── autoload_real.php
└── autoload_static.php
SYMBOL INDEX (339 symbols across 119 files)
FILE: AbstractFactory/Article.php
type Article (line 11) | interface Article
method insert (line 18) | public function insert();
method select (line 25) | public function select();
FILE: AbstractFactory/Factory.php
type Factory (line 11) | interface Factory
method createUser (line 18) | public function createUser();
method createArticle (line 25) | public function createArticle();
FILE: AbstractFactory/MySQLArticle.php
class MySQLArticle (line 11) | class MySQLArticle implements Article
method insert (line 16) | public function insert()
method select (line 24) | public function select()
FILE: AbstractFactory/MySQLFactory.php
class MySQLFactory (line 11) | class MySQLFactory implements Factory
method createUser (line 18) | public function createUser()
method createArticle (line 28) | public function createArticle()
FILE: AbstractFactory/MySQLUser.php
class MySQLUser (line 11) | class MySQLUser implements User
method insert (line 16) | public function insert()
method select (line 24) | public function select()
FILE: AbstractFactory/SQLiteArticle.php
class SQLiteArticle (line 11) | class SQLiteArticle implements Article
method insert (line 18) | public function insert()
method select (line 28) | public function select()
FILE: AbstractFactory/SQLiteFactory.php
class SQLiteFactory (line 11) | class SQLiteFactory implements Factory
method createUser (line 18) | public function createUser()
method createArticle (line 28) | public function createArticle()
FILE: AbstractFactory/SQLiteUser.php
class SQLiteUser (line 11) | class SQLiteUser implements User
method insert (line 16) | public function insert()
method select (line 24) | public function select()
FILE: AbstractFactory/User.php
type User (line 11) | interface User
method insert (line 18) | public function insert();
method select (line 25) | public function select();
FILE: AbstractFactory/index.php
class Client (line 13) | class Client
method run (line 18) | public function run()
FILE: AbstractFactoryWithReflection/Article.php
type Article (line 11) | interface Article
method insert (line 18) | public function insert();
method select (line 25) | public function select();
FILE: AbstractFactoryWithReflection/Factory.php
class Factory (line 8) | class Factory
method __construct (line 27) | public function __construct()
method createUser (line 41) | public function createUser()
method createArticle (line 58) | public function createArticle()
FILE: AbstractFactoryWithReflection/MySQLArticle.php
class MySQLArticle (line 11) | class MySQLArticle implements Article
method insert (line 16) | public function insert()
method select (line 24) | public function select()
FILE: AbstractFactoryWithReflection/MySQLUser.php
class MySQLUser (line 11) | class MySQLUser implements User
method insert (line 16) | public function insert()
method select (line 24) | public function select()
FILE: AbstractFactoryWithReflection/SQLiteArticle.php
class SQLiteArticle (line 11) | class SQLiteArticle implements Article
method insert (line 18) | public function insert()
method select (line 28) | public function select()
FILE: AbstractFactoryWithReflection/SQLiteUser.php
class SQLiteUser (line 11) | class SQLiteUser implements User
method insert (line 16) | public function insert()
method select (line 24) | public function select()
FILE: AbstractFactoryWithReflection/User.php
type User (line 11) | interface User
method insert (line 18) | public function insert();
method select (line 25) | public function select();
FILE: AbstractFactoryWithReflection/index.php
class Client (line 13) | class Client
method run (line 18) | public function run()
FILE: AbstractFactoryWithSimpleFactory/Article.php
type Article (line 11) | interface Article
method insert (line 18) | public function insert();
method select (line 25) | public function select();
FILE: AbstractFactoryWithSimpleFactory/Factory.php
class Factory (line 5) | class Factory
method __construct (line 12) | public function __construct()
method createUser (line 26) | public function createUser()
method createArticle (line 46) | public function createArticle()
FILE: AbstractFactoryWithSimpleFactory/MySQLArticle.php
class MySQLArticle (line 11) | class MySQLArticle implements Article
method insert (line 16) | public function insert()
method select (line 24) | public function select()
FILE: AbstractFactoryWithSimpleFactory/MySQLUser.php
class MySQLUser (line 11) | class MySQLUser implements User
method insert (line 16) | public function insert()
method select (line 24) | public function select()
FILE: AbstractFactoryWithSimpleFactory/SQLiteArticle.php
class SQLiteArticle (line 11) | class SQLiteArticle implements Article
method insert (line 18) | public function insert()
method select (line 28) | public function select()
FILE: AbstractFactoryWithSimpleFactory/SQLiteUser.php
class SQLiteUser (line 11) | class SQLiteUser implements User
method insert (line 16) | public function insert()
method select (line 24) | public function select()
FILE: AbstractFactoryWithSimpleFactory/User.php
type User (line 11) | interface User
method insert (line 18) | public function insert();
method select (line 25) | public function select();
FILE: AbstractFactoryWithSimpleFactory/index.php
class Client (line 13) | class Client
method run (line 18) | public function run()
FILE: Bridge/Circle.php
class Circle (line 11) | class Circle extends Graph
method draw (line 16) | public function draw()
FILE: Bridge/Color.php
class Color (line 11) | abstract class Color
method run (line 16) | abstract public function run();
FILE: Bridge/Graph.php
class Graph (line 11) | abstract class Graph
method __construct (line 24) | public function __construct(Color $color)
method draw (line 32) | abstract public function draw();
FILE: Bridge/Green.php
class Green (line 11) | class Green extends Color
method run (line 16) | public function run()
FILE: Bridge/Red.php
class Red (line 11) | class Red extends Color
method run (line 16) | public function run()
FILE: Bridge/Square.php
class Square (line 11) | class Square extends Graph
method draw (line 16) | public function draw()
FILE: Bridge/Triangle.php
class Triangle (line 11) | class Triangle extends Graph
method draw (line 16) | public function draw()
FILE: Bridge/Yellow.php
class Yellow (line 11) | class Yellow extends Color
method run (line 16) | public function run()
FILE: Bridge/index.php
class Client (line 13) | class Client
method run (line 18) | public function run()
FILE: ClassAdapter/Adaptee.php
class Adaptee (line 11) | class Adaptee
method pay (line 23) | public function pay()
FILE: ClassAdapter/Adapter.php
class Adapter (line 11) | class Adapter extends Adaptee implements Target
method __construct (line 16) | public function __construct()
method notify (line 24) | public function notify()
FILE: ClassAdapter/Target.php
type Target (line 11) | interface Target
method pay (line 18) | public function pay();
method notify (line 25) | public function notify();
FILE: ClassAdapter/index.php
class Client (line 13) | class Client
method run (line 18) | public function run()
FILE: Command/Command.php
class Command (line 10) | class Command implements CommandInterface
method __construct (line 22) | public function __construct(Receiver $receiver)
method execute (line 30) | public function execute()
FILE: Command/CommandInterface.php
type CommandInterface (line 10) | interface CommandInterface
method execute (line 16) | public function execute();
FILE: Command/Invoker.php
class Invoker (line 10) | class Invoker
method setCommand (line 20) | public function setCommand(Command $command)
method run (line 28) | public function run()
FILE: Command/Receiver.php
class Receiver (line 10) | class Receiver
method action (line 15) | public function action()
FILE: Command/index.php
class Client (line 13) | class Client
method run (line 18) | public function run()
FILE: Decorator/Decorator.php
class Decorator (line 11) | abstract class Decorator implements Food
method __construct (line 22) | public function __construct(Food $food)
FILE: Decorator/Egg.php
class Egg (line 11) | class Egg extends Decorator
method name (line 18) | public function name()
method price (line 28) | public function price()
FILE: Decorator/Food.php
type Food (line 11) | interface Food
method name (line 18) | public function name();
method price (line 25) | public function price();
FILE: Decorator/Kaolengmian.php
class Kaolengmian (line 11) | class Kaolengmian implements Food
method name (line 18) | public function name()
method price (line 28) | public function price()
FILE: Decorator/Latiao.php
class Latiao (line 11) | class Latiao extends Decorator
method name (line 18) | public function name()
method price (line 28) | public function price()
FILE: Decorator/Sausage.php
class Sausage (line 11) | class Sausage extends Decorator
method name (line 18) | public function name()
method price (line 28) | public function price()
FILE: Decorator/Shouzhuabing.php
class Shouzhuabing (line 11) | class Shouzhuabing implements Food
method name (line 18) | public function name()
method price (line 28) | public function price()
FILE: Decorator/index.php
class Client (line 13) | class Client
method run (line 18) | public function run()
FILE: Facade/Encrypt.php
class Encrypt (line 10) | class Encrypt
method encrypt (line 15) | public function encrypt()
FILE: Facade/Facade.php
class Facade (line 10) | class Facade
method __construct (line 25) | public function __construct()
method encryptContent (line 34) | public function encryptContent()
FILE: Facade/File.php
class File (line 10) | class File
method content (line 15) | public function content()
FILE: Facade/index.php
class Client (line 13) | class Client
method run (line 18) | public function run()
FILE: FactoryMethod/Add.php
class Add (line 11) | class Add extends Operation
method getResult (line 18) | public function getResult()
FILE: FactoryMethod/AddFactory.php
class AddFactory (line 11) | class AddFactory extends Factory
method create (line 18) | public function create()
FILE: FactoryMethod/Div.php
class Div (line 11) | class Div extends Operation
method getResult (line 18) | public function getResult()
FILE: FactoryMethod/DivFactory.php
class DivFactory (line 11) | class DivFactory extends Factory
method create (line 18) | public function create()
FILE: FactoryMethod/Factory.php
class Factory (line 11) | abstract class Factory
method create (line 18) | abstract public function create();
FILE: FactoryMethod/Mul.php
class Mul (line 11) | class Mul extends Operation
method getResult (line 18) | public function getResult()
FILE: FactoryMethod/MulFactory.php
class MulFactory (line 11) | class MulFactory extends Factory
method create (line 18) | public function create()
FILE: FactoryMethod/Operation.php
class Operation (line 11) | abstract class Operation
method getResult (line 32) | abstract public function getResult();
method setNumberA (line 39) | public function setNumberA($number)
method setNumberB (line 49) | public function setNumberB($number)
FILE: FactoryMethod/Sub.php
class Sub (line 11) | class Sub extends Operation
method getResult (line 18) | public function getResult()
FILE: FactoryMethod/SubFactory.php
class SubFactory (line 11) | class SubFactory extends Factory
method create (line 18) | public function create()
FILE: FactoryMethod/index.php
class Client (line 13) | class Client
method bad (line 18) | public function bad()
method good (line 40) | public function good()
FILE: Flyweight/ConcreteFlyweight.php
class ConcreteFlyweight (line 12) | class ConcreteFlyweight extends Flyweight
method show (line 17) | public function show($content)
FILE: Flyweight/Flyweight.php
class Flyweight (line 12) | abstract class Flyweight
method __construct (line 24) | public function __construct($name)
method show (line 32) | public function show($content){}
FILE: Flyweight/FlyweightFactory.php
class FlyweightFactory (line 12) | class FlyweightFactory
method getFlyweight (line 24) | public function getFlyweight($name)
FILE: Flyweight/UnsharedConcreteFlyweight.php
class UnsharedConcreteFlyweight (line 12) | class UnsharedConcreteFlyweight extends Flyweight
method show (line 17) | public function show($content)
method delete (line 25) | public function delete()
FILE: Flyweight/index.php
class Client (line 13) | class Client
method run (line 18) | public function run()
FILE: Iterator/ContainerInterface.php
type ContainerInterface (line 10) | interface ContainerInterface
method add (line 19) | public function add($name);
method getIterator (line 26) | public function getIterator();
FILE: Iterator/IteratorInterface.php
type IteratorInterface (line 10) | interface IteratorInterface
method hasNext (line 17) | public function hasNext();
method next (line 24) | public function next();
FILE: Iterator/NameContainer.php
class NameContainer (line 10) | class NameContainer implements ContainerInterface
method add (line 24) | public function add($name)
method getIterator (line 34) | public function getIterator()
FILE: Iterator/NameIterator.php
class NameIterator (line 10) | class NameIterator implements IteratorInterface
method __construct (line 27) | public function __construct($nameArray)
method hasNext (line 37) | public function hasNext()
method next (line 47) | public function next()
FILE: Iterator/index.php
class Client (line 13) | class Client
method run (line 18) | public function run()
FILE: ObjectAdapter/Adaptee.php
class Adaptee (line 11) | class Adaptee
method pay (line 23) | public function pay()
FILE: ObjectAdapter/Adapter.php
class Adapter (line 12) | class Adapter implements Target
method __construct (line 19) | public function __construct(Adaptee $adaptee)
method pay (line 30) | public function pay()
method notify (line 40) | public function notify()
FILE: ObjectAdapter/Target.php
type Target (line 11) | interface Target
method pay (line 18) | public function pay();
method notify (line 25) | public function notify();
FILE: ObjectAdapter/index.php
class Client (line 13) | class Client
method run (line 18) | public function run()
FILE: Observer/EmailObserver.php
class EmailObserver (line 10) | class EmailObserver implements Observer
method update (line 15) | public function update()
FILE: Observer/Observer.php
type Observer (line 10) | interface Observer
method update (line 15) | public function update();
FILE: Observer/SMSObserver.php
class SMSObserver (line 10) | class SMSObserver implements Observer
method update (line 15) | public function update()
FILE: Observer/Subject.php
class Subject (line 10) | class Subject extends SubjectAbstract
method publish (line 12) | public function publish()
FILE: Observer/SubjectAbstract.php
class SubjectAbstract (line 10) | abstract class SubjectAbstract
method attach (line 20) | public function attach(Observer $observer)
method notify (line 28) | public function notify()
FILE: Observer/index.php
class Client (line 13) | class Client
method run (line 18) | public function run()
FILE: Prototype/Car.php
class Car (line 9) | class Car
method setName (line 23) | public function setName($name)
FILE: Prototype/DeepDrive.php
class DeepDrive (line 9) | class DeepDrive
method __construct (line 17) | public function __construct()
method setCar (line 27) | public function setCar($car)
method show (line 32) | public function show()
method __clone (line 38) | public function __clone()
FILE: Prototype/ShallowDrive.php
class ShallowDrive (line 9) | class ShallowDrive
method __construct (line 17) | public function __construct()
method setCar (line 27) | public function setCar($car)
method show (line 32) | public function show()
FILE: Prototype/index.php
class Client (line 13) | class Client
method shallowCopy (line 18) | public function shallowCopy()
method deepCopy (line 40) | public function deepCopy()
FILE: Proxy/Proxy.php
class Proxy (line 12) | class Proxy implements Subject
method __construct (line 24) | public function __construct()
method action (line 32) | public function action()
FILE: Proxy/RealSubject.php
class RealSubject (line 12) | class RealSubject implements Subject
method action (line 17) | public function action()
FILE: Proxy/Subject.php
type Subject (line 12) | interface Subject
method action (line 14) | public function action();
FILE: Proxy/index.php
class Client (line 13) | class Client
method run (line 18) | public function run()
FILE: SafeComposite/Component.php
class Component (line 11) | abstract class Component
method __construct (line 22) | public function __construct($name)
method display (line 30) | abstract public function display();
FILE: SafeComposite/Dir.php
class Dir (line 11) | class Dir extends Component
method add (line 23) | public function add(Component $component)
method display (line 31) | public function display()
FILE: SafeComposite/File.php
class File (line 11) | class File extends Component
method display (line 16) | public function display()
FILE: SafeComposite/index.php
class Client (line 13) | class Client
method run (line 18) | public function run()
FILE: SimpleFactory/Add.php
class Add (line 11) | class Add extends Operation
method getResult (line 18) | public function getResult()
FILE: SimpleFactory/Bad.php
class Bad (line 11) | class Bad
method getResult (line 21) | public function getResult($numberA, $operate, $numberB)
FILE: SimpleFactory/Div.php
class Div (line 11) | class Div extends Operation
method getResult (line 18) | public function getResult()
FILE: SimpleFactory/Factory.php
class Factory (line 11) | class Factory
method create (line 19) | public function create($operate)
FILE: SimpleFactory/Mul.php
class Mul (line 11) | class Mul extends Operation
method getResult (line 18) | public function getResult()
FILE: SimpleFactory/Operation.php
class Operation (line 11) | abstract class Operation
method getResult (line 32) | abstract public function getResult();
method setNumberA (line 39) | public function setNumberA($number)
method setNumberB (line 49) | public function setNumberB($number)
FILE: SimpleFactory/Sub.php
class Sub (line 11) | class Sub extends Operation
method getResult (line 18) | public function getResult()
FILE: SimpleFactory/index.php
class Client (line 13) | class Client
method bad (line 18) | public function bad()
method bad2 (line 30) | public function bad2()
method good (line 52) | public function good()
FILE: Template/Huawei.php
class Huawei (line 10) | class Huawei extends Phone
method showLogo (line 17) | protected function showLogo()
FILE: Template/Phone.php
class Phone (line 10) | abstract class Phone
method action (line 15) | final public function action()
method powerOn (line 25) | protected function powerOn()
method showLogo (line 35) | abstract protected function showLogo();
method callUp (line 40) | protected function callUp()
FILE: Template/Xiaomi.php
class Xiaomi (line 10) | class Xiaomi extends Phone
method showLogo (line 17) | protected function showLogo()
FILE: Template/index.php
class Client (line 13) | class Client
method run (line 18) | public function run()
FILE: TransparentComposite/Component.php
class Component (line 11) | abstract class Component
method __construct (line 22) | public function __construct($name)
method add (line 32) | abstract public function add();
method display (line 39) | abstract public function display();
FILE: TransparentComposite/Dir.php
class Dir (line 11) | class Dir extends Component
method add (line 23) | public function add(Component $component)
method display (line 31) | public function display()
FILE: TransparentComposite/File.php
class File (line 11) | class File extends Component
method add (line 17) | public function add(Component $component)
method display (line 25) | public function display()
FILE: TransparentComposite/index.php
class Client (line 13) | class Client
method run (line 18) | public function run()
FILE: singleton/index.php
class Db1 (line 10) | class Db1
method getInstance (line 14) | public static function getInstance()
method __construct (line 23) | public function __construct()
method __clone (line 27) | public function __clone()
method __wakeup (line 31) | public function __wakeup()
class Db2 (line 61) | class Db2
method getInstance (line 65) | public static function getInstance()
method __construct (line 79) | private function __construct()
method __clone (line 86) | private function __clone()
method __wakeup (line 93) | private function __wakeup()
FILE: vendor/composer/ClassLoader.php
class ClassLoader (line 43) | class ClassLoader
method getPrefixes (line 60) | public function getPrefixes()
method getPrefixesPsr4 (line 69) | public function getPrefixesPsr4()
method getFallbackDirs (line 74) | public function getFallbackDirs()
method getFallbackDirsPsr4 (line 79) | public function getFallbackDirsPsr4()
method getClassMap (line 84) | public function getClassMap()
method addClassMap (line 92) | public function addClassMap(array $classMap)
method add (line 109) | public function add($prefix, $paths, $prepend = false)
method addPsr4 (line 156) | public function addPsr4($prefix, $paths, $prepend = false)
method set (line 201) | public function set($prefix, $paths)
method setPsr4 (line 219) | public function setPsr4($prefix, $paths)
method setUseIncludePath (line 238) | public function setUseIncludePath($useIncludePath)
method getUseIncludePath (line 249) | public function getUseIncludePath()
method setClassMapAuthoritative (line 260) | public function setClassMapAuthoritative($classMapAuthoritative)
method isClassMapAuthoritative (line 270) | public function isClassMapAuthoritative()
method setApcuPrefix (line 280) | public function setApcuPrefix($apcuPrefix)
method getApcuPrefix (line 290) | public function getApcuPrefix()
method register (line 300) | public function register($prepend = false)
method unregister (line 308) | public function unregister()
method loadClass (line 319) | public function loadClass($class)
method findFile (line 335) | public function findFile($class)
method findFileWithExtension (line 370) | private function findFileWithExtension($class, $ext)
function includeFile (line 442) | function includeFile($file)
FILE: vendor/composer/autoload_real.php
class ComposerAutoloaderInit88798c90f3cb8871fa59cc0f15b5142f (line 5) | class ComposerAutoloaderInit88798c90f3cb8871fa59cc0f15b5142f
method loadClassLoader (line 9) | public static function loadClassLoader($class)
method getLoader (line 16) | public static function getLoader()
FILE: vendor/composer/autoload_static.php
class ComposerStaticInit88798c90f3cb8871fa59cc0f15b5142f (line 7) | class ComposerStaticInit88798c90f3cb8871fa59cc0f15b5142f
method getInitializer (line 23) | public static function getInitializer(ClassLoader $loader)
Condensed preview — 129 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (99K chars).
[
{
"path": "AbstractFactory/Article.php",
"chars": 351,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactory;\n\n/**\n * Article 产品接口\n *\n * Interface Article\n * @package Baij"
},
{
"path": "AbstractFactory/Factory.php",
"chars": 373,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactory;\n\n/**\n * 工厂接口\n *\n * Interface Factory\n * @package Baijunyao\\De"
},
{
"path": "AbstractFactory/MySQLArticle.php",
"chars": 423,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactory;\n\n/**\n * 应用于 MySQL 的 Article\n *\n * Class MySQLArticle\n * @pack"
},
{
"path": "AbstractFactory/MySQLFactory.php",
"chars": 521,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactory;\n\n/**\n * MySQL 工厂\n *\n * Class MySQLFactory\n * @package Baijuny"
},
{
"path": "AbstractFactory/MySQLUser.php",
"chars": 405,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactory;\n\n/**\n * 应用于 MySQL 的 User\n *\n * Class MySQLUser\n * @package Ba"
},
{
"path": "AbstractFactory/SQLiteArticle.php",
"chars": 494,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactory;\n\n/**\n * 适用于 SQLite 的 Article\n *\n * Class SQLiteArticle\n * @pa"
},
{
"path": "AbstractFactory/SQLiteFactory.php",
"chars": 529,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactory;\n\n/**\n * SQLite 工厂\n *\n * Class SQLiteFactory\n * @package Baiju"
},
{
"path": "AbstractFactory/SQLiteUser.php",
"chars": 406,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactory;\n\n/**\n * 适用于 SQLite 的 User\n *\n * Class SQLiteUser\n * @package "
},
{
"path": "AbstractFactory/User.php",
"chars": 342,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactory;\n\n/**\n * User 产品接口\n *\n * Interface User\n * @package Baijunyao\\"
},
{
"path": "AbstractFactory/index.php",
"chars": 1134,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactory;\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/**\n * 客户端\n *\n *"
},
{
"path": "AbstractFactoryWithReflection/Article.php",
"chars": 379,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactoryWithReflection;\n\n/**\n * Article 产品接口\n *\n * Interface Article\n *"
},
{
"path": "AbstractFactoryWithReflection/Factory.php",
"chars": 1481,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactoryWithReflection;\n\nuse ReflectionClass;\nuse ReflectionException;\n"
},
{
"path": "AbstractFactoryWithReflection/MySQLArticle.php",
"chars": 451,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactoryWithReflection;\n\n/**\n * 应用于 MySQL 的 Article\n *\n * Class MySQLAr"
},
{
"path": "AbstractFactoryWithReflection/MySQLUser.php",
"chars": 433,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactoryWithReflection;\n\n/**\n * 应用于 MySQL 的 User\n *\n * Class MySQLUser\n"
},
{
"path": "AbstractFactoryWithReflection/SQLiteArticle.php",
"chars": 522,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactoryWithReflection;\n\n/**\n * 适用于 SQLite 的 Article\n *\n * Class SQLite"
},
{
"path": "AbstractFactoryWithReflection/SQLiteUser.php",
"chars": 434,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactoryWithReflection;\n\n/**\n * 适用于 SQLite 的 User\n *\n * Class SQLiteUse"
},
{
"path": "AbstractFactoryWithReflection/User.php",
"chars": 370,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactoryWithReflection;\n\n/**\n * User 产品接口\n *\n * Interface User\n * @pack"
},
{
"path": "AbstractFactoryWithReflection/config.php",
"chars": 43,
"preview": "<?php\n\nreturn [\n 'driver' => 'SQLite'\n];"
},
{
"path": "AbstractFactoryWithReflection/index.php",
"chars": 673,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactoryWithReflection;\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/*"
},
{
"path": "AbstractFactoryWithSimpleFactory/Article.php",
"chars": 385,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactoryWithSimpleFactory;\n\n/**\n * Article 产品接口\n *\n * Interface Article"
},
{
"path": "AbstractFactoryWithSimpleFactory/Factory.php",
"chars": 1279,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactoryWithSimpleFactory;\n\nclass Factory\n{\n public $db = 'MySQL';\n\n"
},
{
"path": "AbstractFactoryWithSimpleFactory/MySQLArticle.php",
"chars": 457,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactoryWithSimpleFactory;\n\n/**\n * 应用于 MySQL 的 Article\n *\n * Class MySQ"
},
{
"path": "AbstractFactoryWithSimpleFactory/MySQLUser.php",
"chars": 439,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactoryWithSimpleFactory;\n\n/**\n * 应用于 MySQL 的 User\n *\n * Class MySQLUs"
},
{
"path": "AbstractFactoryWithSimpleFactory/SQLiteArticle.php",
"chars": 528,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactoryWithSimpleFactory;\n\n/**\n * 适用于 SQLite 的 Article\n *\n * Class SQL"
},
{
"path": "AbstractFactoryWithSimpleFactory/SQLiteUser.php",
"chars": 440,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactoryWithSimpleFactory;\n\n/**\n * 适用于 SQLite 的 User\n *\n * Class SQLite"
},
{
"path": "AbstractFactoryWithSimpleFactory/User.php",
"chars": 376,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactoryWithSimpleFactory;\n\n/**\n * User 产品接口\n *\n * Interface User\n * @p"
},
{
"path": "AbstractFactoryWithSimpleFactory/config.php",
"chars": 43,
"preview": "<?php\n\nreturn [\n 'driver' => 'SQLite'\n];"
},
{
"path": "AbstractFactoryWithSimpleFactory/index.php",
"chars": 679,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\AbstractFactoryWithSimpleFactory;\n\nrequire __DIR__.'/../vendor/autoload.php';\n"
},
{
"path": "Bridge/Circle.php",
"chars": 285,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Bridge;\n\n/**\n * 圆形\n *\n * Class Circle\n * @package Baijunyao\\DesignPatterns\\Bri"
},
{
"path": "Bridge/Color.php",
"chars": 227,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Bridge;\n\n/**\n * 颜色抽象类\n *\n * Class Color\n * @package Baijunyao\\DesignPatterns\\B"
},
{
"path": "Bridge/Graph.php",
"chars": 461,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Bridge;\n\n/**\n * 形状抽象类\n *\n * Class Graph\n * @package Baijunyao\\DesignPatterns\\B"
},
{
"path": "Bridge/Green.php",
"chars": 259,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Bridge;\n\n/**\n * 绿色\n *\n * Class Green\n * @package Baijunyao\\DesignPatterns\\Brid"
},
{
"path": "Bridge/Red.php",
"chars": 255,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Bridge;\n\n/**\n * 红色\n *\n * Class Red\n * @package Baijunyao\\DesignPatterns\\Bridge"
},
{
"path": "Bridge/Square.php",
"chars": 287,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Bridge;\n\n/**\n * 正方形\n *\n * Class Square\n * @package Baijunyao\\DesignPatterns\\Br"
},
{
"path": "Bridge/Triangle.php",
"chars": 291,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Bridge;\n\n/**\n * 三角形\n *\n * Class Triangle\n * @package Baijunyao\\DesignPatterns\\"
},
{
"path": "Bridge/Yellow.php",
"chars": 261,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Bridge;\n\n/**\n * 黄色\n *\n * Class Yellow\n * @package Baijunyao\\DesignPatterns\\Bri"
},
{
"path": "Bridge/index.php",
"chars": 1408,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Bridge;\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/**\n * 客户端\n *\n * Class Cl"
},
{
"path": "ClassAdapter/Adaptee.php",
"chars": 335,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\ClassAdapter;\n\n/**\n * 源类\n *\n * Class Target\n * @package Baijunyao\\DesignPatter"
},
{
"path": "ClassAdapter/Adapter.php",
"chars": 399,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\ClassAdapter;\n\n/**\n * 适配器\n *\n * Class Adapter\n * @package Baijunyao\\DesignPatt"
},
{
"path": "ClassAdapter/Target.php",
"chars": 334,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\ClassAdapter;\n\n/**\n * 目标类接口\n *\n * Interface Target\n * @package Baijunyao\\Desig"
},
{
"path": "ClassAdapter/index.php",
"chars": 528,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\ClassAdapter;\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/**\n * 客户端\n *\n * Cl"
},
{
"path": "Command/Command.php",
"chars": 598,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Command;\n\n/**\n * 具体命令类\n *\n * @package Baijunyao\\DesignPatterns\\Command\n */\ncla"
},
{
"path": "Command/CommandInterface.php",
"chars": 215,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Command;\n\n/**\n * 命令接口\n *\n * @package Baijunyao\\DesignPatterns\\Command\n */\ninte"
},
{
"path": "Command/Invoker.php",
"chars": 464,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Command;\n\n/**\n * 命令发送者\n *\n * @package Baijunyao\\DesignPatterns\\Command\n */\ncla"
},
{
"path": "Command/Receiver.php",
"chars": 225,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Command;\n\n/**\n * 命令接收者\n *\n * @package Baijunyao\\DesignPatterns\\Command\n */\ncla"
},
{
"path": "Command/index.php",
"chars": 517,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Command;\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/**\n * 客户端\n *\n * Class C"
},
{
"path": "Decorator/Decorator.php",
"chars": 396,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Decorator;\n\n/**\n * 装饰 配料\n *\n * Class Decorator\n * @package Baijunyao\\DesignPa"
},
{
"path": "Decorator/Egg.php",
"chars": 444,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Decorator;\n\n/**\n * 蛋\n *\n * Class Egg\n * @package Baijunyao\\DesignPatterns\\Deco"
},
{
"path": "Decorator/Food.php",
"chars": 320,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Decorator;\n\n/**\n * 食物\n *\n * Interface Food\n * @package Baijunyao\\DesignPattern"
},
{
"path": "Decorator/Kaolengmian.php",
"chars": 416,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Decorator;\n\n/**\n * 烤冷面\n *\n * Class Kaolengmian\n * @package Baijunyao\\DesignPat"
},
{
"path": "Decorator/Latiao.php",
"chars": 452,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Decorator;\n\n/**\n * 辣条\n *\n * Class Latiao\n * @package Baijunyao\\DesignPatterns\\"
},
{
"path": "Decorator/Sausage.php",
"chars": 452,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Decorator;\n\n/**\n * 肠\n *\n * Class Sausage\n * @package Baijunyao\\DesignPatterns\\"
},
{
"path": "Decorator/Shouzhuabing.php",
"chars": 418,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Decorator;\n\n/**\n * 手抓饼\n *\n * Class Shouzhuabing\n * @package Baijunyao\\DesignPa"
},
{
"path": "Decorator/index.php",
"chars": 1058,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Decorator;\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/**\n * 客户端\n *\n * Class"
},
{
"path": "Facade/Encrypt.php",
"chars": 219,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Facade;\n\n/**\n * 加密类\n *\n * @package Baijunyao\\DesignPatterns\\Facade\n */\nclass E"
},
{
"path": "Facade/Facade.php",
"chars": 655,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Facade;\n\n/**\n * Facade\n *\n * @package Baijunyao\\DesignPatterns\\Facade\n */\nclas"
},
{
"path": "Facade/File.php",
"chars": 224,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Facade;\n\n/**\n * 文件类\n *\n * @package Baijunyao\\DesignPatterns\\Facade\n */\nclass F"
},
{
"path": "Facade/index.php",
"chars": 361,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Facade;\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/**\n * 客户端\n *\n * Class Cl"
},
{
"path": "FactoryMethod/Add.php",
"chars": 316,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\FactoryMethod;\n\n/**\n * 加法\n *\n * Class Add\n * @package Baijunyao\\DesignPatterns"
},
{
"path": "FactoryMethod/AddFactory.php",
"chars": 308,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\FactoryMethod;\n\n/**\n * 加法工厂\n *\n * Class AddFactory\n * @package Baijunyao\\Desig"
},
{
"path": "FactoryMethod/Div.php",
"chars": 426,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\FactoryMethod;\n\n/**\n * 除法\n *\n * Class Div\n * @package Baijunyao\\DesignPatterns"
},
{
"path": "FactoryMethod/DivFactory.php",
"chars": 308,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\FactoryMethod;\n\n/**\n * 除法工厂\n *\n * Class DivFactory\n * @package Baijunyao\\Desig"
},
{
"path": "FactoryMethod/Factory.php",
"chars": 267,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\FactoryMethod;\n\n/**\n * 工厂抽象类\n *\n * Class Factory\n * @package Baijunyao\\DesignP"
},
{
"path": "FactoryMethod/Mul.php",
"chars": 322,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\FactoryMethod;\n\n/**\n * 乘法\n *\n * Class Mul\n * @package Baijunyao\\DesignPatterns"
},
{
"path": "FactoryMethod/MulFactory.php",
"chars": 308,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\FactoryMethod;\n\n/**\n * 乘法工厂\n *\n * Class MulFactory\n * @package Baijunyao\\Desig"
},
{
"path": "FactoryMethod/Operation.php",
"chars": 749,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\FactoryMethod;\n\n/**\n * 操作类型抽象类\n *\n * Class Operation\n * @package Baijunyao\\Des"
},
{
"path": "FactoryMethod/Sub.php",
"chars": 322,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\FactoryMethod;\n\n/**\n * 减法\n *\n * Class Sub\n * @package Baijunyao\\DesignPatterns"
},
{
"path": "FactoryMethod/SubFactory.php",
"chars": 308,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\FactoryMethod;\n\n/**\n * 减法工厂\n *\n * Class SubFactory\n * @package Baijunyao\\Desig"
},
{
"path": "FactoryMethod/index.php",
"chars": 1044,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\FactoryMethod;\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/**\n * 客户端\n *\n * C"
},
{
"path": "Flyweight/ConcreteFlyweight.php",
"chars": 342,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Flyweight;\n\n/**\n * 共享的具体享元类\n *\n * Class ConcreteFlyweight\n *\n * @package Baiju"
},
{
"path": "Flyweight/Flyweight.php",
"chars": 453,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Flyweight;\n\n/**\n * 享元抽象类\n *\n * Class Flyweight\n *\n * @package Baijunyao\\Design"
},
{
"path": "Flyweight/FlyweightFactory.php",
"chars": 520,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Flyweight;\n\n/**\n * 享元工厂\n *\n * Class FlyweightFactory\n *\n * @package Baijunyao\\"
},
{
"path": "Flyweight/UnsharedConcreteFlyweight.php",
"chars": 459,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Flyweight;\n\n/**\n * 不共享的具体享元类\n *\n * Class UnsharedConcreteFlyweight\n *\n * @pack"
},
{
"path": "Flyweight/index.php",
"chars": 871,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Flyweight;\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/**\n * 客户端\n *\n * Class"
},
{
"path": "Iterator/ContainerInterface.php",
"chars": 360,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Iterator;\n\n/**\n * 容器接口\n *\n * @package Baijunyao\\DesignPatterns\\Iterator\n */\nin"
},
{
"path": "Iterator/IteratorInterface.php",
"chars": 328,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Iterator;\n\n/**\n * 迭代器接口\n *\n * @package Baijunyao\\DesignPatterns\\Iterator\n */\ni"
},
{
"path": "Iterator/NameContainer.php",
"chars": 609,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Iterator;\n\n/**\n * 姓名容器\n *\n * @package Baijunyao\\DesignPatterns\\Iterator\n */\ncl"
},
{
"path": "Iterator/NameIterator.php",
"chars": 867,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Iterator;\n\n/**\n * 姓名迭代器\n *\n * @package Baijunyao\\DesignPatterns\\Iterator\n */\nc"
},
{
"path": "Iterator/index.php",
"chars": 600,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Iterator;\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/**\n * 客户端\n *\n * Class "
},
{
"path": "ObjectAdapter/Adaptee.php",
"chars": 337,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\ObjectAdapter;\n\n/**\n * 源类\n *\n * Class Target\n * @package Baijunyao\\DesignPatte"
},
{
"path": "ObjectAdapter/Adapter.php",
"chars": 634,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\ObjectAdapter;\n\n/**\n * 适配器\n *\n * Class Adapter\n * @package Baijunyao\\DesignPat"
},
{
"path": "ObjectAdapter/Target.php",
"chars": 336,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\ObjectAdapter;\n\n/**\n * 目标类接口\n *\n * Interface Target\n * @package Baijunyao\\Desi"
},
{
"path": "ObjectAdapter/index.php",
"chars": 538,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\ObjectAdapter;\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/**\n * 客户端\n *\n * C"
},
{
"path": "Observer/EmailObserver.php",
"chars": 258,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Observer;\n\n/**\n * 发邮件\n *\n * @package Baijunyao\\DesignPatterns\\Observer\n */\ncla"
},
{
"path": "Observer/Observer.php",
"chars": 214,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Observer;\n\n/**\n * Observer 接口\n *\n * @package Baijunyao\\DesignPatterns\\Observer"
},
{
"path": "Observer/SMSObserver.php",
"chars": 256,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Observer;\n\n/**\n * 发短信\n *\n * @package Baijunyao\\DesignPatterns\\Observer\n */\ncla"
},
{
"path": "Observer/Subject.php",
"chars": 258,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Observer;\n\n/**\n * 具体 Subject\n *\n * @package Baijunyao\\DesignPatterns\\Observer\n"
},
{
"path": "Observer/SubjectAbstract.php",
"chars": 560,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Observer;\n\n/**\n * Observer 抽象类\n *\n * @package Baijunyao\\DesignPatterns\\Observe"
},
{
"path": "Observer/index.php",
"chars": 532,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Observer;\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/**\n * 客户端\n *\n * Class "
},
{
"path": "Prototype/Car.php",
"chars": 330,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Prototype;\n\n/**\n * Class Car\n * @package Baijunyao\\DesignPatterns\\Prototype\n *"
},
{
"path": "Prototype/DeepDrive.php",
"chars": 586,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Prototype;\n\n/**\n * Class DeepDrive\n * @package Baijunyao\\DesignPatterns\\Protot"
},
{
"path": "Prototype/ShallowDrive.php",
"chars": 510,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Prototype;\n\n/**\n * Class ShallowDrive\n * @package Baijunyao\\DesignPatterns\\Pro"
},
{
"path": "Prototype/index.php",
"chars": 1137,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Prototype;\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/**\n * 客户端\n *\n * Class"
},
{
"path": "Proxy/Proxy.php",
"chars": 526,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Proxy;\n\n/**\n * 代理\n *\n * Class Proxy\n *\n * @package Baijunyao\\DesignPatterns\\Pr"
},
{
"path": "Proxy/RealSubject.php",
"chars": 266,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Proxy;\n\n/**\n * 真实主题\n *\n * Class RealSubject\n *\n * @package Baijunyao\\DesignPat"
},
{
"path": "Proxy/Subject.php",
"chars": 183,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Proxy;\n\n/**\n * \n *\n * Interface Subject\n *\n * @package Baijunyao\\DesignPattern"
},
{
"path": "Proxy/index.php",
"chars": 348,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Proxy;\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/**\n * 客户端\n *\n * Class Cli"
},
{
"path": "SafeComposite/Component.php",
"chars": 465,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\SafeComposite;\n\n/**\n * 只包含树枝节点和叶子节点公共的方法抽象类\n *\n * Class Component\n * @package "
},
{
"path": "SafeComposite/Dir.php",
"chars": 662,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\SafeComposite;\n\n/**\n * 文件夹\n *\n * Class Dir\n * @package Baijunyao\\DesignPattern"
},
{
"path": "SafeComposite/File.php",
"chars": 301,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\SafeComposite;\n\n/**\n * 文件\n *\n * Class File\n * @package Baijunyao\\DesignPattern"
},
{
"path": "SafeComposite/index.php",
"chars": 1040,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\SafeComposite;\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/**\n * 客户端\n *\n * C"
},
{
"path": "SimpleFactory/Add.php",
"chars": 316,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\SimpleFactory;\n\n/**\n * 加法\n *\n * Class Add\n * @package Baijunyao\\DesignPatterns"
},
{
"path": "SimpleFactory/Bad.php",
"chars": 1041,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\SimpleFactory;\n\n/**\n * 不好的示例\n *\n * Class Bad\n * @package Baijunyao\\DesignPatte"
},
{
"path": "SimpleFactory/Div.php",
"chars": 426,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\SimpleFactory;\n\n/**\n * 除法\n *\n * Class Div\n * @package Baijunyao\\DesignPatterns"
},
{
"path": "SimpleFactory/Factory.php",
"chars": 776,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\SimpleFactory;\n\n/**\n * 工厂类\n *\n * Class Factory\n * @package Baijunyao\\DesignPat"
},
{
"path": "SimpleFactory/Mul.php",
"chars": 322,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\SimpleFactory;\n\n/**\n * 乘法\n *\n * Class Mul\n * @package Baijunyao\\DesignPatterns"
},
{
"path": "SimpleFactory/Operation.php",
"chars": 749,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\SimpleFactory;\n\n/**\n * 操作类型抽象类\n *\n * Class Operation\n * @package Baijunyao\\Des"
},
{
"path": "SimpleFactory/Sub.php",
"chars": 322,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\SimpleFactory;\n\n/**\n * 减法\n *\n * Class Sub\n * @package Baijunyao\\DesignPatterns"
},
{
"path": "SimpleFactory/index.php",
"chars": 1244,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\SimpleFactory;\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/**\n * 客户端\n *\n * C"
},
{
"path": "Template/Huawei.php",
"chars": 293,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Template;\n\n/**\n * Class Huawei\n *\n * @package Baijunyao\\DesignPatterns\\Templat"
},
{
"path": "Template/Phone.php",
"chars": 606,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Template;\n\n/**\n * Class Phone\n *\n * @package Baijunyao\\DesignPatterns\\Template"
},
{
"path": "Template/Xiaomi.php",
"chars": 294,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Template;\n\n/**\n * Class Xiaomi\n *\n * @package Baijunyao\\DesignPatterns\\Templat"
},
{
"path": "Template/index.php",
"chars": 439,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\Template;\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/**\n * 客户端\n *\n * Class "
},
{
"path": "TransparentComposite/Component.php",
"chars": 589,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\TransparentComposite;\n\n/**\n * 包含树枝节点和叶子节点方法的抽象类\n *\n * Class Component\n * @pack"
},
{
"path": "TransparentComposite/Dir.php",
"chars": 676,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\TransparentComposite;\n\n/**\n * 文件夹\n *\n * Class Dir\n * @package Baijunyao\\Design"
},
{
"path": "TransparentComposite/File.php",
"chars": 494,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\TransparentComposite;\n\n/**\n * 文件\n *\n * Class File\n * @package Baijunyao\\Design"
},
{
"path": "TransparentComposite/index.php",
"chars": 1103,
"preview": "<?php\n\nnamespace Baijunyao\\DesignPatterns\\TransparentComposite;\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/**\n * 客户端\n"
},
{
"path": "composer.json",
"chars": 370,
"preview": "{\n \"name\": \"baijunyao/design-patterns\",\n \"description\": \"design patterns\",\n \"type\": \"project\",\n \"license\": \""
},
{
"path": "index.html",
"chars": 2978,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <title>设计模式-白俊遥</title>\n</head>\n<body marginheigh"
},
{
"path": "readme.md",
"chars": 2874,
"preview": "### 文章\n1. [php设计模式(一)序言](https://baijunyao.com/article/158)\n2. [php设计模式(二)单例模式](https://baijunyao.com/article/159)\n3. [p"
},
{
"path": "singleton/index.php",
"chars": 1473,
"preview": "<?php\nnamespace Baijunyao\\DesignPatterns\\Singleton;\n\n/**\n * 普通类\n *\n * Class Db1\n * @package Baijunyao\\DesignPatterns\\Sin"
},
{
"path": "vendor/autoload.php",
"chars": 178,
"preview": "<?php\n\n// autoload.php @generated by Composer\n\nrequire_once __DIR__ . '/composer/autoload_real.php';\n\nreturn ComposerAut"
},
{
"path": "vendor/composer/ClassLoader.php",
"chars": 13420,
"preview": "<?php\n\n/*\n * This file is part of Composer.\n *\n * (c) Nils Adermann <naderman@naderman.de>\n * Jordi Boggiano <j.bogg"
},
{
"path": "vendor/composer/LICENSE",
"chars": 1070,
"preview": "\nCopyright (c) Nils Adermann, Jordi Boggiano\n\nPermission is hereby granted, free of charge, to any person obtaining a co"
},
{
"path": "vendor/composer/autoload_classmap.php",
"chars": 147,
"preview": "<?php\n\n// autoload_classmap.php @generated by Composer\n\n$vendorDir = dirname(dirname(__FILE__));\n$baseDir = dirname($ven"
},
{
"path": "vendor/composer/autoload_namespaces.php",
"chars": 149,
"preview": "<?php\n\n// autoload_namespaces.php @generated by Composer\n\n$vendorDir = dirname(dirname(__FILE__));\n$baseDir = dirname($v"
},
{
"path": "vendor/composer/autoload_psr4.php",
"chars": 203,
"preview": "<?php\n\n// autoload_psr4.php @generated by Composer\n\n$vendorDir = dirname(dirname(__FILE__));\n$baseDir = dirname($vendorD"
},
{
"path": "vendor/composer/autoload_real.php",
"chars": 1762,
"preview": "<?php\n\n// autoload_real.php @generated by Composer\n\nclass ComposerAutoloaderInit88798c90f3cb8871fa59cc0f15b5142f\n{\n p"
},
{
"path": "vendor/composer/autoload_static.php",
"chars": 848,
"preview": "<?php\n\n// autoload_static.php @generated by Composer\n\nnamespace Composer\\Autoload;\n\nclass ComposerStaticInit88798c90f3cb"
}
]
About this extraction
This page contains the full source code of the baijunyao/design-patterns GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 129 files (80.7 KB), approximately 25.3k tokens, and a symbol index with 339 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.