Evgenii Legotckoi
24 вересня 2018 р. 20:34

Приклад - Factory Method на Java

У програмуванні на основі класів шаблон фабричного методу є шаблоном створення, який використовує фабричні методи для вирішення проблеми створення об'єктів без вказівки точного класу об'єкта, який буде створений. Це робиться шляхом створення об'єктів через виклик фабричного методу або зазначеного в інтерфейсі, або реалізованого дочірніми класами, або реалізованого в базовому класі, або необов'язково перевизначеного похідними класами, а не шляхом виклику конструктора.


  1. interface ImageReader {
  2. DecodedImage getDecodeImage();
  3. }
  4.  
  5. class DecodedImage {
  6. private String image;
  7.  
  8. public DecodedImage(String image) {
  9. this.image = image;
  10. }
  11.  
  12. @Override
  13. public String toString() {
  14. return image + ": is decoded";
  15. }
  16. }
  17.  
  18. class GifReader implements ImageReader {
  19. private DecodedImage decodedImage;
  20.  
  21. public GifReader(String image) {
  22. this.decodedImage = new DecodedImage(image);
  23. }
  24.  
  25. @Override
  26. public DecodedImage getDecodeImage() {
  27. return decodedImage;
  28. }
  29. }
  30.  
  31. class JpegReader implements ImageReader {
  32. private DecodedImage decodedImage;
  33.  
  34. public JpegReader(String image) {
  35. decodedImage = new DecodedImage(image);
  36. }
  37.  
  38. @Override
  39. public DecodedImage getDecodeImage() {
  40. return decodedImage;
  41. }
  42. }
  43.  
  44. public class FactoryMethodDemo {
  45. public static void main(String[] args) {
  46. DecodedImage decodedImage;
  47. ImageReader reader = null;
  48. String image = args[0];
  49. String format = image.substring(image.indexOf('.') + 1, (image.length()));
  50. if (format.equals("gif")) {
  51. reader = new GifReader(image);
  52. }
  53. if (format.equals("jpeg")) {
  54. reader = new JpegReader(image);
  55. }
  56. assert reader != null;
  57. decodedImage = reader.getDecodeImage();
  58. System.out.println(decodedImage);
  59. }
  60. }

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
  • Останні коментарі
  • Evgenii Legotckoi
    16 квітня 2025 р. 17:08
    Благодарю за отзыв. И вам желаю всяческих успехов!
  • IscanderChe
    12 квітня 2025 р. 17:12
    Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
  • AK
    01 квітня 2025 р. 11:41
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    09 березня 2025 р. 21:02
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    09 березня 2025 р. 16:14
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…