经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
设计模式之美—工厂方法模式
来源:cnblogs  作者:夜深思  时间:2019/10/18 8:52:21  对本文有异议

工厂方法模式

  简单工厂模式有一个问题就是,类的创建依赖工厂类。

  如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?

  就用到工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
  

  新建酒的接口:

  1. 1 public interface Liqueur {
  2. 2 public void taste();//酒味
  3. 3 }

 

  新建工厂的接口:

  1. 1 public interface Make {
  2. 2 /**
  3. 3 * 造酒的接口,造不同的酒,返回不同的酒味
  4. 4 * @return Liqueur
  5. 5 */
  6. 6 public Liqueur makeLiqueur();
  7. 7 }

 

 创建酒的实现类:

  (1)闷倒驴味道

  1. 1 public class Mdl implements Liqueur {
  2. 2 @Override
  3. 3 public void taste() {
  4. 4 System.out.println("我是闷倒驴,辣的!");
  5. 5 }
  6. 6 }

  (2)跑舌头味道

  1. 1 public class Pst implements Liqueur {
  2. 2 @Override
  3. 3 public void taste() {
  4. 4 System.out.println("我是跑舌头,苦的!");
  5. 5 }
  6. 6 }

 

创建工厂实现类:

(1)制造闷倒驴工厂

  1. 1 /**
  2. 2 * 制造闷倒驴工厂
  3. 3 */
  4. 4 public class MakeMdlFactory implements Make{
  5. 5 /**
  6. 6 * 制造闷倒驴
  7. 7 * @return 闷倒驴味道
  8. 8 */
  9. 9 @Override
  10. 10 public Liqueur makeLiqueur() {
  11. 11 return new Mdl();
  12. 12 }
  13. 13 }

 (2)制造跑舌头工厂

  1. 1 /**
  2. 2 * 制造跑舌头工厂
  3. 3 */
  4. 4 public class MakePstFactory implements Make {
  5. 5 /**
  6. 6 * 制造跑舌头
  7. 7 * @return 跑舌头味道
  8. 8 */
  9. 9 @Override
  10. 10 public Liqueur makeLiqueur() {
  11. 11 return new Pst();
  12. 12 }
  13. 13 }

 

  测试:

  1. 1 public class LiqueurTest {
  2. 2
  3. 3 public static void main(String[] args){
  4. 4 Make mdlFactory = new MakeMdlFactory();
  5. 5 Liqueur mdl = mdlFactory.makeLiqueur();
  6. 6 mdl.taste();
  7. 7
  8. 8 Make pstFactory = new MakeMdlFactory();
  9. 9 Liqueur pst = pstFactory.makeLiqueur();
  10. 10 mdl.taste();
  11. 11 }
  12. 12 }

 

  1. 1 我是闷倒驴,辣的!
  2. 2 我是闷倒驴,辣的!

  这个模式的好处就是,如果你想增加功能(增加一种酒叫二闺女),只需做一个实现类,实现Liqueur接口,同时做一个工厂类,实现Make接口,就OK了。

  无需去改动现成的代码,这样做,拓展性较好!

原文链接:http://www.cnblogs.com/yeshensi/p/11676642.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号