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');
    
     
  • 相关阅读:
    快速排序
    fedora 配置
    while与do while
    switch选择结构
    if选择结构
    java有参
    java猜拳
    java类的无参方法
    java类与对象
    java数组
  • 原文地址:https://www.cnblogs.com/huixuexidezhu/p/5972600.html
Copyright © 2011-2022 走看看