工厂方法模式(定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行)

工厂方法模式是对简单工厂模式的进一步抽象化,可以使系统在不修改原来代码的情况下引进新的产品,满足开闭原则

  • 优点
    1、用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。
    2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
    3、典型的解耦框架。高层模块只需要知道产品的抽象类,无须关心其他实现类,满足迪米特法则、依赖倒置原则和里氏替换原则。

  • 缺点
    1、每次增加一个产品时,都需要增加一个具体产品类和具体工厂类,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度
    2、抽象产品只能生产一种产品,此弊端可使用抽象工厂模式解决

  • 例子:以工厂生产华为手机和苹果手机为例,类图如下:

  • 工厂方法模式的主要角色如下
    抽象工厂(Abstract Factory):提供创建实体对象的接口。
    具体工厂(Concrete Factory):实现抽象工厂中创建实体对象的接口。
    抽象产品(Abstract Product):为具体产品提供公共接口。
    具体产品(Concrete Product):实现抽象产品所定义的接口,由具体工厂来创建,和具体工厂相对应。

  • 代码实现如下

抽象工厂

/*** 抽象工厂*/
public interface Factory {// 生产手机Phone produce();
}

具体工厂

/*** 华为工厂*/
public class HuaweiFactory implements Factory {@Overridepublic Phone produce() {System.out.println("新华为手机");return new HuaweiPhone();}
}
/*** 苹果工厂*/
public class AppleFactory implements Factory {@Overridepublic Phone produce() {System.out.println("新苹果手机");return new ApplePhone();}
}

抽象产品

/*** 手机*/
public interface Phone {// 打电话void call();
}

具体产品

/*** 华为手机*/
public class HuaweiPhone implements Phone {@Overridepublic void call() {System.out.println("用华为手机打电话...");}
}
/*** 苹果手机*/
public class ApplePhone implements Phone {@Overridepublic void call() {System.out.println("用苹果手机打电话...");}
}

测试

public class Test {public static void main(String[] args) {Factory huaweiFactory = new HuaweiFactory();Phone huaweiPhone = huaweiFactory.produce();huaweiPhone.call();Factory appleFactory = new AppleFactory();Phone applePhone = appleFactory.produce();applePhone.call();}
}
// 运行结果
新华为手机
用华为手机打电话...
新苹果手机
用苹果手机打电话...

工厂方法模式(Factory Pattern)相关推荐

  1. 【设计模式】工厂方法模式 Factory Method Pattern

    在简单工厂模式中产品的创建统一在工厂类的静态工厂方法中创建,体现了面形对象的封装性,客户程序不需要知道产品产生的细节,也体现了面向对象的单一职责原则(SRP),这样在产品很少的情况下使用起来还是很方便 ...

  2. 工厂方法模式(Factory Method)简介

    工厂方法模式 名字 跟已经介绍的 简单工厂模式很类似. 实际上它们的模型也是十分相似的. 我们先看看工厂模式的定义. 一. 工厂方法(Factory Method)模式定义 教材上是这样写的: 工厂方 ...

  3. 设计模式之工厂方法模式(Factory Method Pattern)

    一.工厂方法模式的诞生 在读这篇文章之前,我先推荐大家读<设计模式之简单工厂模式(Simple Factory Pattern)>这篇文档.工厂方法模式是针对简单工厂模式中违反开闭原则的不 ...

  4. 设计模式之六:工厂方法模式(Factory method Pattern)

    工厂方法(Factory Method)模式就是定义一个创建对象的工厂接口,将实际创建工作推迟到子类当中. 核心工厂类不再负责具体产品的创建,仅提供了具体工厂子类必须实现的接口,这样核心类成为一个抽象 ...

  5. C++实现工厂方法模式Factory Method Pattern

    设计原则6:要依赖抽象,不要依赖具体类.(又称依赖倒置原则Dependency Inversion Principle) 不能让高层组件依赖低层组件,而且,不管高层组件或低层组件,两者都应该依赖于抽象 ...

  6. 设计模式之工厂方法模式---factory method

    模式的介绍 模式的定义 Define an interface for creating an object,but let subclassed decide which class to inst ...

  7. 设计模式之工厂方法模式(Factory Method)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

  8. 今天俺要说一说工厂方法模式(Factory)

    前言;工厂方法模式又叫做工厂模式,它是23个设计模式中的一个,它解决的还是在软件设计中创建对象的问题,它可以更好的解决用户需求的变化. 问题;在简单工厂模式中,我们将实例化的对象全部放于Factory ...

  9. 软件工程 - 设计模式学习之工厂方法模式Factory Method

    在现实生活中我们可以看见,乐事在卖薯片,可比克也在卖. 我敢肯定的说它们各自都有自己的工厂来生产薯片,而且生产出来的薯片味道还是不一样的. 这就是我们这里所谓的工厂方法模式. 我们来看看这个模式的UM ...

  10. 工厂方法(Factory Pattern)

    工厂方法模式定义:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法让类把实例化推迟到子类.(注:"决定"不是指模式允许子类本身在运行时做决定,而是指在编写创建者 ...

最新文章

  1. JAVA继承类phone_JAVA(9)继承与多态
  2. 光流 | OpenCV中的Lucas-Kanade光流与稠密光流:基于Opencv+Python(附代码)
  3. windows无法新建计算机对象,win10系统ie浏览器提示“Automation 服务器不能创建对象”的办法...
  4. dubbo学习之服务消费者
  5. .NetCore 下开发独立的(RPL)含有界面的组件包 (四)授权过滤
  6. vue.js 引用背景图 background 无效的3种解决办法
  7. MUI入门小白到大师 - 讲解
  8. 织梦响应式鲜花绿植花艺类网站模板(自适应手机端)
  9. 安卓更改目标sdk_您最近是否修改了目标?
  10. 安装Jmeter插件管理器
  11. 互利网上数字金融典型场景: 网络借贷
  12. 力扣—剑指 Offer 45. 把数组排成最小的数
  13. java 文件去除扩展名_使用Java删除所有带扩展名的文件
  14. 增删改查oracle sql,oracle sql增删改查
  15. vb.NET 关于进度条控件使用
  16. SKPlayer -- 一个超级简单好用的音乐插件+CSS+HTML+JS
  17. Panoramic Photography
  18. 计算机无法识别ipad,电脑无法识别iphone、ipad怎么办
  19. 常见的管道命令:sort、uniq、tr、cut
  20. python爬取音乐源码_手把手教你使用Python抓取QQ音乐数据(第一弹)

热门文章

  1. Bugku:加密 聪明的小羊
  2. Yolov3参数理解
  3. 蓝桥杯练习系统[C++]
  4. 学习机器学习,主要牵涉到哪些数学知识?
  5. VS编译错误C4996 'scanf': This function or variable may be unsafe.
  6. 常用的Excel公式
  7. Python中的姓名和身份证的打印
  8. 2021中国电信数据分析笔试
  9. 370A. Rook, Bishop and King codeforce题解
  10. 用 js判断 一个数是否是素数(质数)_小学五年级下册数学公式打印版,孩子考试用的上!...