(@WhiteTaken)设计模式学习——工厂方法模式

这个工厂方法模式,是简单工厂的延伸,不同点在于,将某个具体的类继续细分,将核心部分抽象成一个接口。而简单工厂,把核心写在了一个类上,不利于拓展。

举个例子,简单工厂中有苹果类,香蕉类,我们创建了一个FruitFactory的工厂类,用来生成苹果和香蕉类的实例。

但是如果我们需要创建更多的水果类,这时候就需要修改FruitFactory工厂类。这样做很不方便。

这时候就有了工厂方法模式的实现。

具体方法是我们将总的工厂类,抽象成一个接口,然后创建苹果类工厂和香蕉类工厂,去实现这个接口。

这样即使我们再添加橘子类,我们需要创建橘子类工厂去实现水果工厂的接口。

在客户端的调用中就可以轻松获得橘子对象。

直接上代码:

1.创建一个水果接口,让水果们都去实现它。

1 public interface Fruit {
2     public void Get();
3 }
View Code

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 }
View Code

3.创建水果工厂的接口。

1 public interface FruitFactory {
2     public Fruit getFruit();
3 }
View Code

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 }
View Code

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 }
View Code

这样就完成了工厂方法模式与简单工厂的结合。极大的降低了耦合。

 

posted @ 2017-02-08 00:03  WhiteTaken  阅读(202)  评论(0)    收藏  举报