1、首先假设我们开了一个公司生产苹果手机,打算生产的手机是苹果6和苹果7,然后写一个工厂类,去生成这两种手机。创建两个苹果类,创建工厂类,在工厂类中写两个静态方法分别是制造苹果6和苹果7。至此我们已经造好工厂,很开心,工厂可以很顺利的制造苹果手机了。
2、但是有一天,苹果公司发布了苹果8,为了满足制造苹果8的需求:首先要造一个类苹果8。但是接下来碰到一个问题,要想完成对苹果8的生产,此时只能去修改工厂类,在里面添加一个新的方法,制造苹果8;
3、但是Java不提倡这种写法,因为他已经违反了开闭原则,那该如何解决哪。
4、面向接口的编程:(接口变量的引用可以指向接口实现类变量的引用)。(1)定义一个苹果接口:IApple,苹果6和苹果7类分别实现此接口。
5、(2)定义一个工厂接口:IAppleFactory,此接口有一个方法getApple,返回值是IApple。
6、(3)创建一个苹果6的工厂:Apple6Factory,实现工厂接口,并完成实现类,此实现类实现了对苹果6的生产。同样的道理,我们创建苹果7的工厂,制造苹果7。
7、此时我们就造好了苹果6和苹果7的工厂,如果此时苹果8发布了,我们只需要在再造一个苹果8的工厂,此时可以不用去修改之前写好的任何代码。这就满足了开闭原则,实现了新需求的功能,这就是可扩展的Java工厂模式。