这个工厂方法模式,是简单工厂的延伸,不同点在于,将某个具体的类继续细分,将核心部分抽象成一个接口。而简单工厂,把核心写在了一个类上,不利于拓展。
举个例子,简单工厂中有苹果类,香蕉类,我们创建了一个FruitFactory的工厂类,用来生成苹果和香蕉类的实例。
但是如果我们需要创建更多的水果类,这时候就需要修改FruitFactory工厂类。这样做很不方便。
这时候就有了工厂方法模式的实现。
具体方法是我们将总的工厂类,抽象成一个接口,然后创建苹果类工厂和香蕉类工厂,去实现这个接口。
这样即使我们再添加橘子类,我们需要创建橘子类工厂去实现水果工厂的接口。
在客户端的调用中就可以轻松获得橘子对象。
直接上代码:
1.创建一个水果接口,让水果们都去实现它。
1 public interface Fruit { 2 public void Get(); 3 }
2.创建苹果类和香蕉类。
1 public class Apple implements Fruit{ 2 public void Get() 3 { 4 System.out.println("Apple"); 5 } 6 } 7 8 public class Banana implements Fruit { 9 public void Get() { 10 System.out.println("Banana"); 11 } 12 }
3.创建水果工厂的接口。
1 public interface FruitFactory { 2 public Fruit getFruit(); 3 }
4.创建苹果工厂和香蕉工厂,去实现水果工厂的接口。
1 public class AppleFactory implements FruitFactory{ 2 public Fruit getFruit() { 3 return new Apple(); 4 } 5 } 6 7 public class BananaFactory implements FruitFactory { 8 public Fruit getFruit() { 9 return new Banana(); 10 } 11 }
5.主客户端要做的事。
1 public class MainClass { 2 public static void main(String[] args) throws InstantiationException, IllegalAccessException { 3 FruitFactory appleFactory=new AppleFactory(); 4 FruitFactory bananaFactory=new BananaFactory(); 5 Fruit apple=appleFactory.getFruit(); 6 Fruit banana=bananaFactory.getFruit(); 7 apple.Get(); 8 banana.Get(); 9 } 10 }
这样就完成了工厂方法模式与简单工厂的结合。极大的降低了耦合。