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

来源:互联网 发布:js获取列表合计金额 编辑:程序博客网 时间:2024/06/01 19:26

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

举个例子,简单工厂中有苹果类,香蕉类,我们创建了一个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

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

 

0 0
原创粉丝点击