zoukankan      html  css  js  c++  java
  • 策略模式

    最近工作使用到设计模式,在选用设计模式的时候,发觉设计模式理解不难,难的是在某个场景下选用哪个设计模式。就是设计模式的使用场景。

    策略模式

    策略模式适用情况是你已经知道了某个算法。第一步做什么,第二步做什么,第三步做什么。但是具体的三步在不同场景怎么做有不同的行为。

    代码举例:

    <?php
    
    abstract Database
    {
        abstract public function showTables();
    
        abstract public function showEngine();
    }
    
    class Content
    {
        private $dabatase;
    
        public function setDatabase(Database $database) {
            $this->database = $database;
        }
    
        public function Print() {
            $tables = $this->database->showTables();
            $engine = $this->database->showEngine();
            return [
                'table' => $tables,
                'engine' => $engine
            ];
        }
    }
    
    
    class MysqlDatabase implements Database
    {
        public function showTables() {
            return ['mysql1', 'mysql2'];
        }
    
        public function showEngine() {
            return ['innodb', 'myisam'];
        }
    
    }
    
    class PgDatabase implements Database
    {
        public function showTables() {
            return ['pg1', 'pg2'];
        }
    
        public function showEngine() {
            return ['pginno1', 'pginno2'];
        }
    
    }
    
    $content = new Content();
    $content->setDatabase(new MysqlDatabase());
    $content->Print();
    

    策略模式属于行为型模式。行为型模式主要是区分算法流程和对象的职责分配。在策略模式中,对象类界定对象行为。策略类界定算法流程。

    一句话:策略模式适用于已知算法流程的行为场景。

  • 相关阅读:
    E-Eating Together(POJ 3670)
    F-Dining Cows(POJ 3671)
    I-MooFest(POJ 1990)
    A-Apple Catching(POJ 2385)
    H-The Cow Lineup(POJ 1989)
    LOOPS(HDU 3853)
    Card Collector(HDU 4336)
    Help Me Escape (ZOJ 3640)
    Collecting Bugs(POJ 2096)
    c#大圣之路笔记——c# 从DataGrid中导出数据 Session
  • 原文地址:https://www.cnblogs.com/yjf512/p/6546490.html
Copyright © 2011-2022 走看看