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.
Behavior pattern'lar da creational pattern'lar da her ne kadar farklı işler yapsalar da ortak amaç üzerine inşa edilir. Ki bu design pattern'ların projelere implement edilmesindeki en önemli etkendir. Şimdi burada, hangi proje için hangi pattern daha uygundur tartışmasına mı gireceğiz? Ayrıca ben size adapter uygun değil demedim ki, sadece farklı yapılarda kullanılabilir dedim. İkisi farklı şeyler.
İyi çalışmalar.