好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java中常用的设计模式之工厂模式详解

优点

1.一个调用者想创建一个对象,只要知道其名称就可以了。

2.扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。

3.屏蔽产品的具体实现,调用者只关心产品的接口。

缺点

1.每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

使用场景

1.日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。

2.数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。

3.设计一个连接服务器的框架,需要三个协议,[POP3]、[IMAP]、[HTTP],可以把这三个作为产品类,共同实现一个接口。

一、实现方式

例如:我们需要在电商平台购买一台手机,我们并不需要去关心手机生产厂商是如何把手机生产出来的,我们只需要在搜索框输入:华为手机,小米手机,就能购买到我们想要的手机了。下面看看具体实现吧。

1、定义一个接口

?

1

2

3

4

5

6

7

8

9

package com.asurplus测试数据mon.factory;

public interface Phone {

     /**

      * 获取手机

      *

      * @return

      */

     String getPhone();

}

2、定义两个接口实现类

?

1

2

3

4

5

6

7

8

9

10

package com.asurplus测试数据mon.factory;

/**

  * 华为手机实现类

  */

public class HuaweiPhone implements Phone {

     @Override

     public String getPhone() {

         return "华为手机" ;

     }

}

?

1

2

3

4

5

6

7

8

9

10

package com.asurplus测试数据mon.factory;

/**

  * 小米手机实现类

  */

public class XiaomiPhone implements Phone {

     @Override

     public String getPhone() {

         return "小米手机" ;

     }

}

3、定义一个工厂类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

package com.asurplus测试数据mon.factory;

/**

  * 手机工厂类

  */

public class PhoneFactory {

     /**

      * 获取手机

      *

      * @param name

      * @return

      */

     public static Phone getPhone(String name) {

         if ( "华为" .equals(name)) {

             return new HuaweiPhone();

         }

         if ( "小米" .equals(name)) {

             return new XiaomiPhone();

         }

         return null ;

     }

}

二、测试

?

1

2

3

4

5

6

7

8

9

10

11

package com.asurplus测试数据mon.factory;

/**

  * 工厂模式

  */

public class TestMain {

     public static void main(String[] args) {

         // 获取手机

         Phone huaweiPhone = PhoneFactory.getPhone( "华为" );

         System.out.println(huaweiPhone.getPhone());

     }

}

输出结果

我们输入的:华为,得到了华为手机,从而实现了我们的工厂模式。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!  

原文链接:https://lizhou.blog.csdn.net/article/details/123148971

查看更多关于Java中常用的设计模式之工厂模式详解的详细内容...

  阅读:11次