За последние 24 часа нас посетили 66333 программиста и 1616 роботов. Сейчас ищут 1022 программиста ...

Шаблон Factory method

Тема в разделе "Прочие вопросы по PHP", создана пользователем immortal.1986, 26 июн 2014.

  1. immortal.1986

    immortal.1986 Активный пользователь

    С нами с:
    24 сен 2013
    Сообщения:
    257
    Симпатии:
    0
    Добрый день хотел получить комментарии и подзатыльники!
    есть шаблон как вы думаете корректно ли выполнил, что можно заменить ,исправить
    вот https://github.com/immortal1986/library-classes/blob/master/pattern/Factory_method.php

    или код
    Код (PHP):
    1. namespace pattern;
    2.  
    3. interface dataClearReturn{
    4.     function check($inputData);
    5. }
    6. class checkString implements dataClearReturn{
    7.    function check($inputData){
    8.        if(is_string($inputData)){
    9.            return "yes this is really is string - " . $inputData;
    10.        }else{
    11.            return "no this is not string - " . gettype($inputData);
    12.        }
    13.    }
    14. }
    15. class checkInteger{
    16.     function check($inputData){
    17.         if(is_numeric($inputData)){
    18.             return "is yours integer - {$inputData}";
    19.         }else{
    20.             return "Nope";
    21.         }
    22.     }
    23. }
    24.  
    25.  
    26. class Factory_method {
    27.     public static function checker($data){
    28.         $data = gettype($data);
    29.             switch($data){
    30.                 case "integer": return new checkInteger();break;
    31.                 case "string": return new checkString();break;
    32.             }
    33.     }
    34.  
    35. }
    36.  
    37. $str = "MYSTRING";
    38. $int =  100;
    39.  
    40. $objInt = Factory_method::checker($int);
    41.     echo $objInt->check($int);
    42.     echo $objInt->check($str);
    43. $objStr = Factory_method::checker($str);
    44.     echo $objStr->check($str);
    45.     echo $objStr->check($int);
    46.  
     
  2. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Это не фабричный метод.
    В фабричном методе у вас должно быть два класса - создателя для каждого из объектов, т.е. не Factory_method, а StringCreator и IntegerCreator.
    То, что вы пытаетесь сделать, в некоторых источниках называется Simple Factory
     
  3. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Несколько замечаний:
    1. По оформлению кода:
    1) Названия интерфейсов лучше начинать с буквы i
    2) Методы должны отражать уровень доступа - public/private/protected

    2. По логике
    1) checkInteger не имплементит интерфейс
    2) is_numeric не является логическим продолжением checkInteger. is_numeric вернет true, если аргумент double.