java 工厂模式的讲解及优缺点的介绍

作者:lqh 时间:2022-02-05 10:57:09 

简单工厂模式介绍:

概要:

简单工厂模式,又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,把产品的生产方法封装起来放进工厂类,工厂类可以根据参数的不同返回不同产品类的实例。工厂类就是用来生产产品的类,把生产产品的方法放到工厂类里面去,工厂类里面用switch语句控制生产哪种商品,使用者只需要调用工厂类的静态方法就可以实现产品类的实例化。

实现代码:


package scut.designmodel.SimpleFactoryPattern;

//抽象产品类
abstract class Product{
 public abstract void Show();
}

//产品A类
class ProductA extends Product{

@Override
 public void Show() {
   System.out.println("生产出了产品A");
 }
}

//产品B类
class ProductB extends Product{

@Override
 public void Show() {
   System.out.println("生产出了产品C");
 }
}

//产品C类
class ProductC extends Product{

@Override
 public void Show() {
   System.out.println("生产出了产品C");
 }
}

//简单工厂类
class Factory {
 public static Product Manufacture(String ProductName){
   switch (ProductName){
     case "A":
       return new ProductA();

case "B":
       return new ProductB();

case "C":
       return new ProductC();

default:
       return null;

}
 }
}

//工厂产品生产流程
public class SimpleFactoryPattern {
 public static void main(String[] args){
   Factory mFactory = new Factory();

//客户要产品A
   try {
     mFactory.Manufacture("A").Show();
   }catch (NullPointerException e){
     System.out.println("没有这一类产品");
   }

//客户要产品B
   try {
     mFactory.Manufacture("B").Show();
   }catch (NullPointerException e){
     System.out.println("没有这一类产品");
   }

//客户要产品C
   try {
     mFactory.Manufacture("C").Show();
   }catch (NullPointerException e){
     System.out.println("没有这一类产品");
   }

//客户要产品D
   try {
     mFactory.Manufacture("D").Show();
   }catch (NullPointerException e){
     System.out.println("没有这一类产品");
   }
 }
}

结果:


生产出了产品A
生产出了产品C
生产出了产品C
没有这一类产品

应用场景:

当没有使用工厂模式的时候,每个“产品”类都是分散的,没有使用一个工厂接口把它们整合起来,而且,加入例子里面生产productA需要传入三个“原料”参数,使用者要清晰地知道这些参数才能把productA类实例化,每个产品参数不同的话,会让使用者非常凌乱,使用“工厂”则可以把参数封装在里面,让使用者不用知道具体参数就可以实例化出所需要的“产品”类。

优点:

将创建实例的工作与使用实例的工作分开,使用者不必关心类对象如何创建,明确了职责。

把初始化实例时的工作放到工厂里进行,使代码更容易维护。 更符合面向对象的原则,面向接口编程,而不是面向实现编程。

缺点:

  1. 由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。

  2. 要新增产品类的时候,就要修改工厂类的代码,违反了开放封闭原则(对扩展的开放,对修改的关闭)。

  3. 简单工厂模式由于使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构。

虽然有不少的缺点,但是简单工厂方法还是应用得很广泛,下面我们来看看它的升级版——工厂方法模式。

来源:http://blog.csdn.net/totond/article/details/51811392

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

猜你喜欢

  • springboot中validator数据校验功能的实现

    2021-07-31 17:43:50
  • Mybatis-Plus的使用详解

    2022-01-18 18:39:27
  • mybatis QueryWrapper的条件构造之apply、last、select解析

    2022-02-12 17:32:51
  • 详解Java多线程编程中线程的启动、中断或终止操作

    2023-07-04 20:32:40
  • 十分钟速懂java知识点 System类

    2022-11-25 04:19:26
  • Maven生命周期和及插件原理用法详解

    2021-09-17 09:47:19
  • 带你了解Spring中bean的获取

    2021-10-10 09:53:10
  • 使用SpringBoot 配置Oracle和H2双数据源及问题

    2023-10-04 14:06:11
  • java基于递归算法实现汉诺塔问题实例

    2022-10-22 00:16:14
  • java连接zookeeper实现zookeeper教程

    2022-09-19 03:04:35
  • Java转JSON串的几种方式

    2023-08-24 07:38:47
  • flutter 路由跳转的实现示例

    2023-08-23 14:55:26
  • Mybatis的详细使用教程

    2022-02-15 21:08:20
  • Spring的自动装配Bean的三种方式

    2023-08-24 23:05:15
  • Java经典设计模式之模板方法模式定义与用法示例

    2021-07-09 14:07:49
  • Flutter控制组件显示和隐藏三种方式详解

    2023-07-07 03:03:30
  • SpringBoot配置拦 截器实现过程详解

    2023-11-24 17:14:58
  • Java多线程的临界资源问题解决方案

    2021-12-29 07:44:35
  • WPF开发技巧之花式控件功能扩展详解

    2022-07-13 05:56:52
  • 利用Flutter制作经典贪吃蛇游戏

    2023-07-21 07:04:13
  • asp之家 软件编程 m.aspxhome.com