• 工厂方法模式--简单工厂模式--抽象工厂模式


    1.工厂方法模式。定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法是一个类的实例化延迟到其子类。

    工厂方法模式类结构图:

    工厂方法模式

    实现:

    <?php
    //抽象产品类
    abstract class AbstractProduct{
        //共有的方法
        public function common(){
    
        }
        public abstract function behavior();
    }
    //具体产品类
    class ConcreteProduct1 extends AbstractProduct{
        public function behavior(){
            echo "doing what product1 should do!
    ";
        }
    }
    class ConcreteProduct2 extends AbstractProduct{
        public function behavior(){
            echo "I just doing what product2 should do!
    ";
        }
    }
    
    //抽象工厂类
    abstract class AbstractCreator{
        public abstract function createProduct($productname);
    }
    //具体工厂类
    class ConcreteCreate extends AbstractCreator{
        public function createProduct($productname){
            try{
                $product = new ReflectionClass($productname);
                $instance = $product->newInstanceArgs();
                //$instance->behavior();
                return $instance;
            }catch(LogicException $e){
               die("Not gonna make it in here...
    ");
            }catch(ReflectionException $e){
               die("Your class does not exist!
    ");
            }
        }
    }
    //场景类
    class Client{
        public function gene(){
            $creator = new ConcreteCreate();
            $product1 = $creator->createProduct("ConcreteProduct1");
            $product1->behavior();
            $product2 = $creator->createProduct("ConcreteProduct2");
            $product2->behavior();
        }
    }
    
    Client::gene();

    2.简单工厂模式。又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

      简单工厂模式类结构图:

    简单工厂模式类结构图

     实现代码,只在工厂方法模式做小的修改即可。

    <?php
    //抽象产品类
    abstract class AbstractProduct{
        //共有的方法
        public function common(){
    
        }
        public abstract function behavior();
    }
    //具体产品类
    class ConcreteProduct1 extends AbstractProduct{
        public function behavior(){
            echo "doing what product1 should do!
    ";
        }
    }
    class ConcreteProduct2 extends AbstractProduct{
        public function behavior(){
            echo "I just doing what product2 should do!
    ";
        }
    }
    
    //简单工厂类
    class simpleCreator{
        public function createProduct($productname){
            try{
                $product = new ReflectionClass($productname);
                $instance = $product->newInstanceArgs();
                //$instance->behavior();
                return $instance;
            }catch(LogicException $e){
               die("Not gonna make it in here...
    ");
            }catch(ReflectionException $e){
               die("Your class does not exist!
    ");
            }
        }
    }
    //场景类
    class Client{
        public function gene(){
            $creator = new simpleCreator();
            $product1 = $creator->createProduct("ConcreteProduct1");
            $product1->behavior();
            $product2 = $creator->createProduct("ConcreteProduct2");
            $product2->behavior();
        }
    }
    
    Client::gene();
    

      

    3.抽象工厂模式。为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。

    抽象工厂模式类结构图

    php代码实现:

    <?php
    //抽象产品类A
    abstract class AbstractProductA{
        //共有的方法
        public function common(){
    
        }
        public abstract function behavior();
    }
    //具体产品类A
    class ConcreteProductA1 extends AbstractProductA{
        public function behavior(){
            echo "doing what product1 should do!
    ";
        }
    }
    class ConcreteProductA2 extends AbstractProductA{
        public function behavior(){
            echo "I just doing what product2 should do!
    ";
        }
    }
    
    //抽象产品类B
    abstract class AbstractProductB{
        //共有的方法
        public function common(){
    
        }
        public abstract function bdosomething();
    }
    //具体产品类B
    class ConcreteProductB1 extends AbstractProductB{
        public function bdosomething(){
            echo "b....1!
    ";
        }
    }
    class ConcreteProductB2 extends AbstractProductB{
        public function bdosomething(){
            echo "b......2!
    ";
        }
    }
    //抽象工厂类
    abstract class AbstractCreator{
        public abstract function createProductA();
        public abstract function createProductB();
    }
    //具体工厂类
    class ConcreteCreator1 extends AbstractCreator{
        public function createProductA(){
                return (new ConcreteProductA1());
        }
        public function createProductB(){
                return (new ConcreteProductB1());
        }
    }
    class ConcreteCreator2 extends AbstractCreator{
        public function createProductA(){
                return (new ConcreteProductA2());
        }
        public function createProductB(){
                return (new ConcreteProductB2());
        }
    }
    //场景类
    class Client{
        public function gene(){
            $creator1 = new ConcreteCreator1();
            $productA1 = $creator1->createProductA();
            $productB1 = $creator1->createProductB();
            $creator2 = new ConcreteCreator2();
            $productA2 = $creator2->createProductA();
            $productB2 = $creator2->createProductB();
            $productB2->bdosomething();
        }
    }
    
    Client::gene();
    

      

  • 相关阅读:
    FZU 2105 (线段树)
    HDU 4903 (模拟+贪心)
    Codeforces Beta Round #91 (Div. 1 Only) E. Lucky Array
    HDU 3308 (线段树区间合并)
    POJ 3667(线段树区间合并)
    线段树题集 (cf版)
    HDU 4902 (牛叉的线段树)
    20150204--JS巩固与加强2-01
    20150203+JS巩固与加强1-02
    20150203+JS巩固与加强1-01
  • 原文地址:https://www.cnblogs.com/zhutianpeng/p/4234297.html
Copyright © 2020-2023  润新知