• javascript / PHP [Design Patterns


    This pattern involves a single class which provides simplified methods required by client and delegates calls to methods of existing system classes.

    /**
     * Design Patterns - Facade Pattern
     * https://www.tutorialspoint.com/design_pattern/facade_pattern.htm
     */
    // interface
    function Shape() {}
    Shape.prototype.draw = function() {throw "Shape::draw() must be overridden";};
    
    // implements Shape
    function Rectangle() {
        Shape.call(this);
    }
    Rectangle.prototype = new Shape();
    Rectangle.prototype.draw = function() {
        console.log("Rectangle::draw()");
    };
    
    // implements Shape
    function Square() {
        Shape.call(this);
    }
    Square.prototype = new Shape();
    Square.prototype.draw = function() {
        console.log("Square::draw()");
    };
    
    // implements shape
    function Circle() {
        Shape.call(this);
    }
    Circle.prototype = new Shape();
    Circle.prototype.draw = function() {
        console.log("Circle::draw()");
    };
    
    function ShapeMaker() {
        this.circle = new Circle();
        this.rectangle = new Rectangle();
        this.square = new Square();
    }
    ShapeMaker.prototype.drawCircle = function() {
        this.circle.draw();
    };
    ShapeMaker.prototype.drawRectangle = function() {
        this.rectangle.draw();
    };
    ShapeMaker.prototype.drawSquare = function() {
        this.square.draw();
    };
    
    function FacadePatternDemo() {
        this.shapeMaker = new ShapeMaker();
    }
    FacadePatternDemo.prototype.main = function() {
        this.shapeMaker.drawCircle();
        this.shapeMaker.drawRectangle();
        this.shapeMaker.drawSquare();
    };
    
    var demo = new FacadePatternDemo();
    demo.main();
    

      

    Output:

    Circle::draw()
    Rectangle::draw()
    Square::draw()

    <?php
    /**
     * The complicated, underlying logic.
     */
    class CPU {
        public function freeze() {
            echo 'CPU freeze'.PHP_EOL;
        }
        public function jump($position) {
            printf("CPU jumping to 0x%x %s", $position, PHP_EOL);
        }
        public function execute() {
            echo 'CPU executing...'.PHP_EOL;
        }
    }
    
    class Memory {
        public function load($position, $data) {
            printf("Loading position 0x%x from memory, "%s"%s", $position, implode('', $data), PHP_EOL);
        }
    }
    
    class HardDrive
    {
        public function read($lba, $size) {
            printf("HardDrive is reading sector#%d, size=%d %s", $lba, $size, PHP_EOL);
            return ['H','e','l','l','o'];
        }
    }
    
    /**
     * The facade that users would be interacting with.
     */
    class ComputerFacade
    {
        protected $cpu;
        protected $memory;
        protected $hd;
    
        public function __construct()
        {
            $this->cpu = new CPU;
            $this->ram = new Memory;
            $this->hd = new HardDrive;
        }
    
        public function start()
        {
            $this->cpu->freeze();
            $this->ram->load(0x8280, $this->hd->read(0, 512));
            $this->cpu->jump(0x8280);
            $this->cpu->execute();
        }
    }
    
    /**
     * How a user could start the computer.
     */
    $computer = new ComputerFacade;
    $computer->start();
    

      

    OUTPUT:

    CPU freeze
    HardDrive is reading sector#0, size=512
    Loading position 0x8280 from memory, "Hello"
    CPU jumping to 0x8280
    CPU executing...

  • 相关阅读:
    JavaScript中的方法和属性
    vue的计算属性与方法的不同
    vue 中使用 watch 出现了如下的报错
    vue中methods函数调用methods函数写法
    ES2015箭头函数与普通函数对比理解
    leetcode Single Number python
    leetcode first bad version python
    leetcode Search for a Range python
    leetcode Longest Valid Parentheses python
    python dict traversal
  • 原文地址:https://www.cnblogs.com/mingzhanghui/p/9364541.html
Copyright © 2020-2023  润新知