zoukankan      html  css  js  c++  java
  • 设计模式学习(四)、工厂方法模式

    1工厂方法模式的概念:

    定义了一个创建对象的接口,但是由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。(这里所谓的决定,并不是指模式允许子类本身在运行时做决定,而是指在编写创建者类时,不需要知道实际创建的产品是哪一个。选择使用哪个子类,就决定了实际创建的产品是什么)

    2.工厂方法模式的结构图

    3.工厂方法模式角色说明

    抽象创建者(creator)角色:creator是一个抽象类,实现了所有的操作产品的方法,但是不实现工厂方法。
    具体创建者(ConcreteCreator)角色:ConcreteCreate实现FactoryMethod()方式,以创造出实际的产品。
    抽象产品(product)角色:所有的产品都必须实现这个共同结构,这样一来,使用这些产品就可以引用这个接口而不是具体的类。。
    具体产品(ConcreteProduct)角色:具体产品类,实现抽象产品接口。

    4.工厂方法模式的实现

    <?php
    /**
     * 工厂方式模式实例
     */
    //抽象工厂类
    public abstract Class Creator
    {
        public function operation($type){
            $product = $this->factory($type);
            $product->operation1();
            $product->operation2();
            $product->operation3();
    
        }
        public function operation1(){
            echo 'operation 1';
        }
        public function operation2(){
            echo 'operation 2';
        }
        public function operation3(){
            echo 'operation 3';
        }
        public abstract  function factory($type);
    }
    
    //具体工厂类
    class ConcreteCreator extends  Creator
    {
        public function factory($type){
            if($type == 'apple')
                return new ConcreteProduct1();
            else if($type == 'orange')
                return new ConcreteProduct2();
            else
                return null;
        }
    }
    
    //抽象产品
    interface Product
    {
        public function description();
    }
    //具体产品
    
    class ConcreteProduct1 implements  Product
    {
        public function description(){
            echo 'this is ConcreteProduct1';
        }
    }
    //具体产品
    
    class ConcreteProduct2 implements  Product
    {
        public function description(){
            echo 'this is ConcreteProduct2';
        }
    }
    
    //客户端使用
    $c = new ConcreteCreator();
    $c->operation('apple');
    $c->operation('orange');
    
     
  • 相关阅读:
    ural 1723 Sandro's Book
    ural 1104 Don’t Ask Woman about Her Age
    ural 1052 Rabbit Hunt
    ural 1837 Isenbaev's Number
    ural 1348 Goat in the Garden 2
    ural 1207 Median on the Plane
    ural 1640 Circle of Winter
    段错误 核心已转储尝试解决
    显卡相关命令介绍【转载】
    Linux的top命令学习【转载】
  • 原文地址:https://www.cnblogs.com/huixuexidezhu/p/5972600.html
Copyright © 2011-2022 走看看