欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 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了。

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