Java使用设计模式中的工厂方法模式实例解析

作者:pastqing 时间:2021-12-07 03:57:49 

工厂方法模式的定义
工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
它包含了如下角色:

  • 抽象产品(Product)

  • 具体产品(ConcreteProduct)

  • 抽象工厂(Factory)

  • 具体工厂(ConcreteFactory)

模式的UML类图

Java使用设计模式中的工厂方法模式实例解析

实例
假设有三个笔芯,分别是红笔芯、蓝笔芯和黑笔芯。用户希望通过圆珠笔来明确笔芯的颜色。
模式的结构的描述与使用
1.抽象产品(Product): PenCore.java


public abstract class PenCore{
 String color;
 public abstract void writeWord(String s);
}

2.具体产品(ConcreteProduct)_1 : RedPenCore.java


public class RedPenCore extends PenCore{
 RedPenCore(){
  color="红色";
 }
 public void writeWord(String s){
   System.out.println("写出"+color+"的字:"+s);
 }
}

具体产品(ConcreteProduct)_2 : BluePenCore.java


public class BluePenCore extends PenCore{
 BluePenCore(){
  color="蓝色";
 }
 public void writeWord(String s){
   System.out.println("写出"+color+"的字:"+s);
 }
}

具体产品(ConcreteProduct)_3: BlackPenCore.java


public class BlackPenCore extends PenCore{
 BlackPenCore(){
  color="黑色";
 }
 public void writeWord(String s){
   System.out.println("写出"+color+"的字:"+s);
 }
}

3.构造者(Creator): BallPen.java


public abstract class BallPen{
 BallPen(){
   System.out.println("生产了一只装有"+getPenCore().color+"笔芯的圆珠笔");
 }
 public abstract PenCore getPenCore(); //工厂方法
}

4.具体构造者(ConcreteCreator):


RedBallPen.java
public class RedBallPen extends BallPen{
 public PenCore getPenCore(){
   return new RedPenCore();
 }
}
BlueBallPen.java
public class BlueBallPen extends BallPen{
 public PenCore getPenCore(){
   return new BluePenCore();
 }
}
BlackBallPen.java
public class BlackBallPen extends BallPen{
 public PenCore getPenCore(){
   return new BlackPenCore();
 }
}

5.应用 Application.java


public class Application{
 public static void main(String args[]){
   PenCore penCore;
   BallPen ballPen=new BlueBallPen();
   penCore=ballPen.getPenCore();
   penCore.writeWord("你好,很高兴认识你");
   ballPen=new RedBallPen();
   penCore=ballPen.getPenCore();
   penCore.writeWord("How are you");
   ballPen=new BlackBallPen();
   penCore=ballPen.getPenCore();
   penCore.writeWord("nice to meet you");
 }
}

总结
工厂方法模式属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。
工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了面向对象的多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不负责产品类被实例化这种细节,这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品
工厂方法模式的主要优点是增加新的产品类时无须修改现有系统,并封装了产品对象的创建细节,系统具有良好的灵活性和可扩展性;其缺点在于增加新产品的同时需要增加新的工厂,导致系统类的个数成对增加,在一定程度上增加了系统的复杂性

标签:Java,设计模式,工厂方法模式
0
投稿

猜你喜欢

  • Spring MVC的优点与核心接口_动力节点Java学院整理

    2023-11-28 05:43:36
  • C++实现LeetCode(5.最长回文子串)

    2023-07-03 06:07:13
  • Flutter 如何正确显示SnackBar

    2023-06-23 13:00:40
  • java读写ini文件、FileOutputStream问题

    2023-11-29 08:50:13
  • java实现字符串四则运算公式解析工具类的方法

    2021-11-03 09:22:23
  • Android封装实现短信验证码的获取倒计时

    2023-06-28 22:57:23
  • 你所不知道的Spring自动注入详解

    2021-09-04 19:30:08
  • 5种Android数据存储方式汇总

    2023-08-06 06:49:04
  • Mybatis初始化知识小结

    2023-11-01 13:59:27
  • java生成图片验证码示例程序

    2023-09-13 10:17:57
  • Java下载文件时文件名乱码问题解决办法

    2023-08-23 17:37:03
  • java 字符串截取的三种方法(推荐)

    2021-05-24 06:49:52
  • JavaWeb实现多文件上传及zip打包下载

    2023-11-16 16:41:25
  • JAVA中实现原生的 socket 通信机制原理

    2021-08-08 03:06:01
  • Java操作pdf的工具类itext的处理方法

    2023-07-14 11:51:53
  • Java经典面试题最全汇总208道(六)

    2023-11-23 17:52:45
  • Knife4j 3.0.3 整合SpringBoot 2.6.4的详细过程

    2023-11-25 03:54:34
  • 浅谈java多线程wait,notify

    2023-11-29 16:29:03
  • Java超详细分析泛型与通配符

    2023-07-28 08:34:26
  • C语言运算符优先级列表(超详细)

    2023-07-04 08:17:54
  • asp之家 软件编程 m.aspxhome.com