У програмуванні на основі класів шаблон фабричного методу є шаблоном створення, який використовує фабричні методи для вирішення проблеми створення об'єктів без вказівки точного класу об'єкта, який буде створений. Це робиться шляхом створення об'єктів через виклик фабричного методу або зазначеного в інтерфейсі, або реалізованого дочірніми класами, або реалізованого в базовому класі, або необов'язково перевизначеного похідними класами, а не шляхом виклику конструктора.
- interface ImageReader {
- DecodedImage getDecodeImage();
- }
- class DecodedImage {
- private String image;
- public DecodedImage(String image) {
- this.image = image;
- }
- @Override
- public String toString() {
- return image + ": is decoded";
- }
- }
- class GifReader implements ImageReader {
- private DecodedImage decodedImage;
- public GifReader(String image) {
- this.decodedImage = new DecodedImage(image);
- }
- @Override
- public DecodedImage getDecodeImage() {
- return decodedImage;
- }
- }
- class JpegReader implements ImageReader {
- private DecodedImage decodedImage;
- public JpegReader(String image) {
- decodedImage = new DecodedImage(image);
- }
- @Override
- public DecodedImage getDecodeImage() {
- return decodedImage;
- }
- }
- public class FactoryMethodDemo {
- public static void main(String[] args) {
- DecodedImage decodedImage;
- ImageReader reader = null;
- String image = args[0];
- String format = image.substring(image.indexOf('.') + 1, (image.length()));
- if (format.equals("gif")) {
- reader = new GifReader(image);
- }
- if (format.equals("jpeg")) {
- reader = new JpegReader(image);
- }
- assert reader != null;
- decodedImage = reader.getDecodeImage();
- System.out.println(decodedImage);
- }
- }