ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

设计模式之美—工厂方法模式

2019-10-16 16:56:52  阅读:268  来源: 互联网

标签:return taste Liqueur 之美 工厂 设计模式 Make public


工厂方法模式

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

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

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

  新建酒的接口:

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了。

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

标签:return,taste,Liqueur,之美,工厂,设计模式,Make,public
来源: https://www.cnblogs.com/yeshensi/p/11676642.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有