java 工厂模式的实例详解

作者:lqh 时间:2023-11-28 08:48:57 

java 工厂模式的实例详解

工厂方法中的“工厂”和我们平常理解的一样:用于生产产品。

而客户是要和产品打交道,所以工厂方法模式的意义在于把客户和产品分开,达到解耦和更灵活的目的。

一般我们有一个产品的抽象类,然后有几个具体的产品,如下:


//抽象产品角色
public interface Product{
 void product();
}
//具体产品1
public class Pro1 implements Product{
 @Override
 public void product() {
   System.out.println("产品1");
 }
}
//具体产品2
public class Pro2 implements Product{
 @Override
 public void product() {
   System.out.println("产品2");
 }
}

接着客户要购买产品,他不直接和产品接触,而是使用工厂,所以我们有一个工厂:


public class Factory {
   public static Product buy(type) {
     switch (type) {

case 1:
       return new Pro1();

case 2:
       return new Pro2();

default:
       break;
     }
     return null;
   }
 }

客户通过Factory .buy(type);即可购买到自己想要的产品。

————— 这就是 简单工厂模式,又称为 静态工厂方法模式。

如果新增了一款产品,我们多写一个产品类Pro3就可以了,但在工厂上我们要添加新的代码才能生产,这显然不符合“开闭原则(对扩展开放;对修改封闭)”,所以我们把工厂抽象,添加具体的工厂类,由客户选择某一个工厂,如下:


//抽象工厂
public interface Factory {
 Product buy();
}
//具体工厂1
public class Factory1 implements Factory {
 @Override
 public Product buy() {
   return new Pro1();
 }
}
//具体工厂2
public class Factory2 implements Factory {
 @Override
 public Product buy() {
   return new Pro2();
 }
}

当新增了一款产品,我们多创建一个具体的工厂来生产就可以了。但是当产品种类非常多时,会出现大量的与之对应的工厂对象,这并不是我们所希望的。

——— 这就是 工厂方法模式

当产品出现多个抽象时,我们可能会有多个产品接口,这个场景就成了我们所说的

——- 抽象工厂模式

总结:

无论是简单工厂模式,工厂方法模式,还是抽象工厂模式,他们都属于工厂模式,在形式和特点上也是极为相似的,他们的最终目的都是为了解耦。在使用时,我们不必去在意这个模式到底工厂方法模式还是抽象工厂模式,因为他们之间的演变常常是令人琢磨不透的。经常你会发现,明明使用的工厂方法模式,当新需求来临,稍加修改,加入了一个新方法后,由于类中的产品构成了不同等级结构中的产品族,它就变成抽象工厂模式了;而对于抽象工厂模式,当减少一个方法使的提供的产品不再构成产品族之后,它就演变成了工厂方法模式。 所以,在使用工厂模式时,只需要关心降低耦合度的目的是否达到了。

来源:http://blog.csdn.net/lb850747906/article/details/52782340

标签:java,工厂模式
0
投稿

猜你喜欢

  • WPF实现列表分页控件的示例代码

    2023-12-25 06:46:02
  • 解决Unity无限滚动复用列表的问题

    2022-12-26 04:42:18
  • Java实现简单的抽牌游戏

    2022-10-06 11:55:01
  • C#编写的艺术字类实例代码

    2023-01-26 10:00:44
  • C#静态static的用法实例分析

    2022-06-30 09:37:27
  • Java类初始化和实例化中的2个“雷区”

    2021-12-13 00:48:18
  • Android编程实现图片平铺的方法分析

    2022-05-27 06:37:40
  • Android 数据库文件存取至储存卡的方法

    2023-05-08 19:12:14
  • java通过JFrame做一个登录系统的界面完整代码示例

    2023-11-06 05:18:32
  • java简易小游戏制作代码

    2023-11-23 19:49:38
  • Java事件机制要素及实例详解

    2022-11-27 07:10:53
  • C#由当前日期计算相应的周一和周日的实例代码

    2021-12-02 00:37:09
  • Unity打开淘宝app并跳转到商品页面功能的实现方法

    2023-06-17 01:05:18
  • 一文搞懂Java MD5算法的原理及实现

    2023-01-04 21:10:24
  • Android实现朋友圈评论回复列表

    2022-12-16 03:40:36
  • QT实现QML侧边导航栏的最简方法

    2021-09-17 02:54:35
  • Java桶排序之基数排序详解

    2021-08-26 13:38:58
  • idea 多模块项目依赖父工程class找不到问题的方法

    2022-06-08 10:47:41
  • springboot大文件上传、分片上传、断点续传、秒传的实现

    2023-06-16 02:18:30
  • spring mvc中的@PathVariable获得请求url中的动态参数

    2023-08-22 22:08:40
  • asp之家 软件编程 m.aspxhome.com