工厂方法模式
简单工厂模式有一个问题就是,类的创建依赖工厂类。
如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?
就用到工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
新建酒的接口:
- 1 public interface Liqueur {
- 2 public void taste();//酒味
- 3 }
新建工厂的接口:
- 1 public interface Make {
- 2 /**
- 3 * 造酒的接口,造不同的酒,返回不同的酒味
- 4 * @return Liqueur
- 5 */
- 6 public Liqueur makeLiqueur();
- 7 }
创建酒的实现类:
(1)闷倒驴味道
- 1 public class Mdl implements Liqueur {
- 2 @Override
- 3 public void taste() {
- 4 System.out.println("我是闷倒驴,辣的!");
- 5 }
- 6 }
(2)跑舌头味道
- 1 public class Pst implements Liqueur {
- 2 @Override
- 3 public void taste() {
- 4 System.out.println("我是跑舌头,苦的!");
- 5 }
- 6 }
创建工厂实现类:
(1)制造闷倒驴工厂
- 1 /**
- 2 * 制造闷倒驴工厂
- 3 */
- 4 public class MakeMdlFactory implements Make{
- 5 /**
- 6 * 制造闷倒驴
- 7 * @return 闷倒驴味道
- 8 */
- 9 @Override
- 10 public Liqueur makeLiqueur() {
- 11 return new Mdl();
- 12 }
- 13 }
(2)制造跑舌头工厂
- 1 /**
- 2 * 制造跑舌头工厂
- 3 */
- 4 public class MakePstFactory implements Make {
- 5 /**
- 6 * 制造跑舌头
- 7 * @return 跑舌头味道
- 8 */
- 9 @Override
- 10 public Liqueur makeLiqueur() {
- 11 return new Pst();
- 12 }
- 13 }
测试:
- 1 public class LiqueurTest {
- 2
- 3 public static void main(String[] args){
- 4 Make mdlFactory = new MakeMdlFactory();
- 5 Liqueur mdl = mdlFactory.makeLiqueur();
- 6 mdl.taste();
- 7
- 8 Make pstFactory = new MakeMdlFactory();
- 9 Liqueur pst = pstFactory.makeLiqueur();
- 10 mdl.taste();
- 11 }
- 12 }
这个模式的好处就是,如果你想增加功能(增加一种酒叫二闺女),只需做一个实现类,实现Liqueur接口,同时做一个工厂类,实现Make接口,就OK了。
无需去改动现成的代码,这样做,拓展性较好!