美文网首页PHP开发PHP经验分享
编程中的设计模式之建造者模式

编程中的设计模式之建造者模式

作者: phpworkerman | 来源:发表于2020-07-19 22:00 被阅读0次
介绍

建造者模式(Builder Pattern)使用一个个简单的对象构建出复杂的对象,属于创建型模式。这类模式有两个工作核心,一个负责创建和提供类,另一个负责处理类之间的依赖关系。

处理文件实例

模拟一个需求:通过传入 php 文件和 sh 文件,采用不同的编辑器进行处理,php 使用 phpstorm,sh 使用 notepad ,并记录操作日志,php 使用 word 记录,sh 使用 excel 记录(纯粹学习用,真实业务不这么设计),这时候语言编辑器、日志编辑器、文件处理方式都是独立的产品部件,需要工厂生产出来,组装后才能提供给客户端。

<?php
//定义建造类接口,负责各个子类的建造
interface Builder
{
    public function file($file);
    public function editor();
    public function exec($file);
}
//定义抽象类实现建造类功能,是对具体的类(产品)概括
abstract class ExeFile implements Builder
{
    public function file($file)
    {
        return pathinfo($file, PATHINFO_EXTENSION);
    }

    public abstract function editor();
    public abstract function exec($file);
}
//具体文件类实现
class PhpFile extends ExeFile
{
    public function editor()
    {
        return new Phpstorm();
    }

    public function exec($file)
    {
        $editor = $this->editor();
        $ext = $this->file($file);
        return $editor->handle($ext);
    }
}
//具体文件类实现
class ShFile extends ExeFile
{
    public function editor()
    {
        return new Notepad();
    }

    public function exec($file)
    {
        $editor = $this->editor();
        $ext = $this->file($file);
        return $editor->handle($ext);
    }
}
//抽象日志编辑工具类
abstract class OfficeFile implements Builder
{
    public function file($file)
    {
        return pathinfo($file, PATHINFO_EXTENSION);
    }

    public abstract function editor();
    public abstract function exec($file);
}
//具体日志编辑工具类实现
class Word extends OfficeFile
{
    public function editor()
    {
        return new Msword();
    }

    public function exec($file)
    {
        $editor = $this->editor();

        $ext = $this->file($file);
        return $editor->handle($ext);
    }
}
//具体日志编辑工具类实现
class Excel extends OfficeFile
{
    public function editor()
    {
        return new Msexcel();
    }

    public function exec($file)
    {
        $editor = $this->editor();

        $ext = $this->file($file);
        return $editor->handle($ext);
    }
}
//定义文件编辑器类的接口
interface Editor
{
    public function handle($ext);
}
//具体编辑器类实现
class Phpstorm implements Editor
{
    public function handle($ext)
    {
        return '当前用Phpstorm操作的是 ' . $ext . ' 可执行文件';
    }
}
//具体编辑器类实现
class Notepad implements Editor
{
    public function handle($ext)
    {
        return '当前用Notepad操作的是 ' . $ext . ' 可执行文件';
    }
}
//具体编辑器类实现
class Msword implements Editor
{
    public function handle($ext)
    {
        return 'Msword 记录'. $ext .'文件执行过程,并生成LOG';
    }
}
//具体编辑器类实现
class Msexcel implements Editor
{
    public function handle($ext)
    {
        return 'Msword 记录'. $ext .'文件执行过程,并生成LOG';
    }
}
//导演类,负责组装建造者类生成的产品
class OperaFile
{
    public function handlePhpFile($file)
    {
        $phpFile    = new PhpFile();
        $editor     = $phpFile->editor();
        $editor_msg = $editor->handle($file);

        $word    = new Word();
        $log     = $word->editor();
        $log_msg = $log->handle($file);

        return $editor_msg . '<br>' . $log_msg;
    }

    public function handleShFile($file)
    {
        $shFile     = new ShFile();
        $editor     = $shFile->editor();
        $editor_msg = $editor->handle($file);

        $excel   = new Excel();
        $log     = $excel->editor();
        $log_msg = $log->handle($file);

        return $editor_msg . '<br>' . $log_msg;
    }
}

$_file      = new OperaFile();
$php_result = $_file->handlePhpFile('demo.php');
$sh_result  = $_file->handleShFile('run.sh');
总结

建造者模式通过创建类来完成产品的创建,并由导演类完成产品的组装,和工厂模式相比,建造者模式多了一个导演类,会对产品进行组装然后再提供给客户端。

相关文章

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

  • 设计模式之建造者模式

    设计模式之建造者模式 Intro 简介 建造者模式: 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加...

  • 编程中的设计模式之建造者模式

    介绍 建造者模式(Builder Pattern)使用一个个简单的对象构建出复杂的对象,属于创建型模式。这类模式有...

  • 设计模式之建造者模式

    设计模式之建造者模式 1. 模式定义 建造者模式又可以成为生成器模式,它属于对象创建型模式。建造者模式将一个复杂对...

  • Javaの设计模式之建造者模式

    推荐阅读:《设计模式之禅》 今早早起,刚刚出炉,哈哈 BuilderPattern 设计模式之建造者模式 Demo...

  • 设计模式之建造者模式

    设计模式之建造者模式 建造者模式 属于 创建型模式,提供一种创建对象的最佳方式。 创建型模式 指不是直接使用ne...

  • Builder Pattern in Java

    建造者模式:建造者模式定义建造者模式应用场景实现案例Jdk中的建造者模式建造者模式的优点建造者模式的缺点 建造者模...

  • 面向面试学习之设计模式:建造者模式

    每种设计模式的出现,都是为了解决一些编程不够优雅的问题,建造者模式也是这样。 维基百科解释是:建造者模式 Buil...

  • Retrofit

    Retrofit设计模式 动态代理,装饰模式,建造者模式,抽象工厂模式,适配器模式 建造者模式创建Retrofit...

  • 【Java设计模式】--建造者模式

    建造者模式(Bulider模式) 一、什么是建造者模式 建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示...

网友评论

    本文标题:编程中的设计模式之建造者模式

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