Her providerı factory yapmak uygun değil aslında.
Çünkü factory creational olarak bilindiği için amacı sadece obje yaratmak.
Örnek olarak şu kodu incelersek;
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);     } }
Buradaki XReaderlar sadece bir obje yaratır. String alır ve onu objeye çevirir görevi çok simpledır.
O yüzden de "... bir interface ile kalıtım alınıp ta yapılabilir..." dediğiniz noktada artık bir structure'a dönüşüyor. Bu yüzden adapter, strategy daha uygun.