• 工厂模式(描述语言PHP)


    工厂模式分为,简单工厂,工厂方法,抽象工厂

    简单工厂:主要特点,在工厂类中做判断,来创造对应的产品。

    <?php

    /**
    * 工厂模式,简单工厂模式
    *
    * 主要是在工厂中做判断,从而创造相应的产品
    *
    * 缺点,增加新类型时,需更改工厂类
    * 违反了开放封闭原则(软件实体,类,模块,函数)可以扩展
    *
    */
    define("ONE",1);
    define("TWO",2);
    class FactoryOne{
    public function create()
    {

    }
    }
    class FactoryTwo{
    public function create()
    {

    }
    }
    class Factory{
    public function __construct()
    {

    }

    public function create_instance($type)
    {
    if($type == ONE){
    return new FactoryOne();
    }else if($type == TWO){
    return new FactoryTwo();
    }
    }
    }

    工厂方法:主要特点,创建对象的接口,让子类决定实例化哪个类,使一个类的实例化延迟到子类。

    <?php

    /**
    * 工厂模式,工厂方法模式
    *
    * 定义一个用于创建对象的接口
    *
    * Factory Method 使一个类的实例化延迟到子类
    *
    * 缺点:没增加一个产品,则需要增加一个工厂
    *
    */
    abstract class SingleCore
    {
    abstract public function create();

    abstract public function show();
    }

    class SingleA extends SingleCore
    {
    public function create()
    {
    parent::create(); // TODO: Change the autogenerated stub
    }

    public function show()
    {
    return '工厂A';
    }

    }

    class SingleB extends SingleCore
    {
    public function create()
    {
    parent::create(); // TODO: Change the autogenerated stub
    }

    public function show()
    {
    return '工厂B';
    }
    }

    abstract class FactoryMethod
    {
    public function create_instance()
    {

    }
    }

    class FactoryMethodA extends FactoryMethod
    {
    public function create_instance()
    {
    return new SingleA();
    }

    }

    class FactoryMethodB extends FactoryMethod
    {

    public function create_instance()
    {
    return new SingleB();
    }
    }

    抽象工厂:主要特点,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

    <?php

    /**
    * 工厂模式,抽象工厂
    *
    * 以往,简单工厂和工厂方法模式,局限于一类产品,有一个共同的基类
    * 要为不同类提供一个对象创建的接口,那么就要使用抽象工厂了
    *
    */
    abstract class SignleCore
    {
    abstract public function show();
    }

    abstract class MuliteCore
    {
    abstract public function show();
    }

    class SignleA extends SignleCore
    {
    public function show()
    {

    }
    }

    class SignleB extends SignleCore
    {
    public function show()
    {

    }
    }

    class MuliteA extends MuliteCore
    {
    public function show()
    {
    // TODO: Implement show() method.
    }
    }

    class MuliteB extends MuliteCore
    {
    public function show()
    {
    // TODO: Implement show() method.
    }
    }

    abstract class AbstractFactory
    {
    abstract public function createSingle();
    abstract public function createMulite();
    }
    class FactoryA extends AbstractFactory
    {
    public function createSingle()
    {
    // TODO: Implement createSingle() method.
    return new SignleA();
    }

    public function createMulite()
    {
    // TODO: Implement createMulite() method.
    return new MuliteA();
    }

    }

    class FactoryB extends AbstractFactory
    {
    public function createSingle()
    {
    // TODO: Implement createSingle() method.
    return new SingleB();
    }

    public function createMulite()
    {
    // TODO: Implement createMulite() method.
    return new MuliteB();
    }

    }



  • 相关阅读:
    Linux下的输入/输出重定向
    strcpy与strncpy的区别
    C++的函数重载
    gtest 学习二
    gtest 学习一
    char* wchar* char wchar转换
    iconv 编译不通过问题
    嵌入式常用库
    驱动编程class_create说明
    libiconv 交叉编译
  • 原文地址:https://www.cnblogs.com/wmzll/p/11090761.html
Copyright © 2020-2023  润新知