博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java设计模式1--工厂方法模式(Factory Method)
阅读量:5923 次
发布时间:2019-06-19

本文共 2649 字,大约阅读时间需要 8 分钟。

本文地址:,转载请注明源地址。

工厂方法模式(别名:虚拟构造)

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

概述

 当系统准备为用户提供某个类的子类的实例,又不想让用户代码和该子类形成耦合时,就可以使用工厂方法模式来设计系统。工厂方法模式的关键是在一个接口或抽象类中定义一个抽象方法,该方法返回某个类的子类的实例,该抽象类或接口让其子类或实现该接口的类通过重写这个抽象方法返回某个子类的实例。

适用性

1.当一个类不知道它所必须创建的对象的类的时候。

2.当一个类希望由它的子类来指定它所创建的对象的时候。

3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。  

参与者

1.Product 定义工厂方法所创建的对象的接口。

2.ConcreteProduct 实现Product接口。

3.Creator 声明工厂方法,该方法返回一个Product类型的对象。 Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。 可以调用工厂方法以创建一个Product对象。

4.ConcreteCreator 重定义工厂方法以返回一个ConcreteProduct实例。

工厂方法模式的结构与使用

模式的结构中包括四种角色:

•抽象产品(Product)

•具体产品(ConcreteProduct)

•构造者(Creator)

•具体构造者(ConcreteCreator) 

模式的UML类图

实战部分

例1】:假设有三个笔芯,分别是红笔芯、蓝笔芯和黑笔芯。用户希望通过圆珠笔来明确笔芯的颜色。

模式的结构的描述与使用 

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.javapublic class RedBallPen extends BallPen{    public PenCore getPenCore(){       return new RedPenCore();    }}BlueBallPen.javapublic class BlueBallPen extends BallPen{    public PenCore getPenCore(){       return new BluePenCore();    }}BlackBallPen.javapublic 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");    }} 

工厂方法模式的优点

•使用工厂方法可以让用户的代码和某个特定类的子类的代码解耦。

•工厂方法使用户不必知道它所使用的对象是怎样被创建的,只需知道该对象有哪些方法即可。 

你可能感兴趣的文章
陈天桥:欣赏360保护隐私 用户安全永远第一
查看>>
JMeter使用技巧
查看>>
【Jump Game II 】cpp
查看>>
ubuntu 下 apache+tomcat整合_(mod-jk方法)[转]
查看>>
iis6 zencart1.39 伪静态规则
查看>>
Python学习之路7——深浅拷贝剖析
查看>>
宁波竞赛题
查看>>
Java实现Socket5代理服务器
查看>>
Android-异步图像装载机
查看>>
MySQL学习笔记——安装及配置环境
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
android 物理按键 监听
查看>>
Do You Kown Asp.Net Core - 根据实体类自动创建Razor Page CURD页面模板
查看>>
npm 主要命令
查看>>
【Android Studio安装部署系列】五、新建你的第一个项目:HelloWorld
查看>>
Android 数据库初窥
查看>>
使用Phaser开发你的第一个H5游戏(一)
查看>>
十、performSelector延时调用内存泄漏的问题
查看>>
理解JVM(二):垃圾收集算法
查看>>
Redux专题:实用
查看>>