设计模式之美—工厂方法模式
程序员文章站
2022-04-21 15:34:33
工厂方法模式 简单工厂模式有一个问题就是,类的创建依赖工厂类。 如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决? 就用到工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代 ......
工厂方法模式
有一个问题就是,类的创建依赖工厂类。
如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?
就用到工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
新建酒的接口:
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 }
1 我是闷倒驴,辣的! 2 我是闷倒驴,辣的!
这个模式的好处就是,如果你想增加功能(增加一种酒叫二闺女),只需做一个实现类,实现liqueur接口,同时做一个工厂类,实现make接口,就ok了。
无需去改动现成的代码,这样做,拓展性较好!