博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java设计模式(2)——工厂方法模式
阅读量:5268 次
发布时间:2019-06-14

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

  工厂方法模式同样属于类的创建型模式又被称为多态工厂模式工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。

一、模式中包含的角色及其职责

1.抽象工厂(Creator)角色

  工厂方法模式的核心,任何工厂类都必须实现这个接口。
2.具体工厂( Concrete Creator)
  角色具体工厂类是抽象工厂的一个实现,负责实例化产品对象
3.抽象(Product)角色
  工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
4.具体产品(Concrete Product)角色
  工厂方法模式所创建的具体实例对象

二、工厂方法模式和简单工厂模式的比较

  1. 工厂方法模式与简单工厂模式在结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。
  2. 工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。
  3. 当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了“开放-封闭”原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。
  4. 工厂方法模式退化后可以演变成简单工厂模式。

三、Demo

抽象角色

public interface Fruit {    /*     * 采集     */    public void get();}

具体产品

public class Apple implements Fruit{    /*     * 采集     */    public void get(){        System.out.println("采集苹果");    }}
public class Banana implements Fruit{    /*     * 采集     */    public void get(){        System.out.println("采集香蕉");    }}

抽象工厂角色

public interface FruitFactory {    public Fruit getFruit();}

具体工厂

public class AppleFactory implements FruitFactory {    public Fruit getFruit() {        return new Apple();    }}
public class BananaFactory implements FruitFactory {    public Fruit getFruit() {        return new Banana();    }}

测试方法

public class MainClass {    public static void main(String[] args) {        //获得AppleFactory        FruitFactory ff = new AppleFactory();        //通过AppleFactory来获得Apple实例对象        Fruit apple = ff.getFruit();        apple.get();                //获得BananaFactory        FruitFactory ff2 = new BananaFactory();        Fruit banana = ff2.getFruit();        banana.get();            }}

控制台输出

采集苹果采集香蕉

四、UML类图

转载于:https://www.cnblogs.com/realshijing/p/8410640.html

你可能感兴趣的文章
sql 函数
查看>>
hdu 2807 The Shortest Path 矩阵
查看>>
高斯模糊的简单算法
查看>>
熟悉项目需求,要知道产品增删修改了哪些内容,才会更快更准确的在该项目入手。...
查看>>
JavaScript 变量
查看>>
java实用类
查看>>
车机/盒子新福音 NCS8828:HDMI转YPbPr转换芯片
查看>>
mysql 主从库同步
查看>>
smarty模板自定义变量
查看>>
研究称90%的癌症由非健康生活习惯导致
查看>>
命令行启动Win7系统操作部分功能
查看>>
ABP入门系列(6)——定义导航菜单
查看>>
PHP CURL CURLOPT参数说明(curl_setopt)
查看>>
排序sort (一)
查看>>
IOS - 真机调试
查看>>
黑苹果 安装教程
查看>>
Intent应用
查看>>
暑假周报告总结第二周
查看>>
spark源码编译,本地调试
查看>>
Parrot虚拟机
查看>>