工厂方法模式(Factory Pattern)
工厂方法模式(定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行)
工厂方法模式是对简单工厂模式的进一步抽象化,可以使系统在不修改原来代码的情况下引进新的产品,满足开闭原则。
优点:
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)相关推荐
- 【设计模式】工厂方法模式 Factory Method Pattern
在简单工厂模式中产品的创建统一在工厂类的静态工厂方法中创建,体现了面形对象的封装性,客户程序不需要知道产品产生的细节,也体现了面向对象的单一职责原则(SRP),这样在产品很少的情况下使用起来还是很方便 ...
- 工厂方法模式(Factory Method)简介
工厂方法模式 名字 跟已经介绍的 简单工厂模式很类似. 实际上它们的模型也是十分相似的. 我们先看看工厂模式的定义. 一. 工厂方法(Factory Method)模式定义 教材上是这样写的: 工厂方 ...
- 设计模式之工厂方法模式(Factory Method Pattern)
一.工厂方法模式的诞生 在读这篇文章之前,我先推荐大家读<设计模式之简单工厂模式(Simple Factory Pattern)>这篇文档.工厂方法模式是针对简单工厂模式中违反开闭原则的不 ...
- 设计模式之六:工厂方法模式(Factory method Pattern)
工厂方法(Factory Method)模式就是定义一个创建对象的工厂接口,将实际创建工作推迟到子类当中. 核心工厂类不再负责具体产品的创建,仅提供了具体工厂子类必须实现的接口,这样核心类成为一个抽象 ...
- C++实现工厂方法模式Factory Method Pattern
设计原则6:要依赖抽象,不要依赖具体类.(又称依赖倒置原则Dependency Inversion Principle) 不能让高层组件依赖低层组件,而且,不管高层组件或低层组件,两者都应该依赖于抽象 ...
- 设计模式之工厂方法模式---factory method
模式的介绍 模式的定义 Define an interface for creating an object,but let subclassed decide which class to inst ...
- 设计模式之工厂方法模式(Factory Method)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...
- 今天俺要说一说工厂方法模式(Factory)
前言;工厂方法模式又叫做工厂模式,它是23个设计模式中的一个,它解决的还是在软件设计中创建对象的问题,它可以更好的解决用户需求的变化. 问题;在简单工厂模式中,我们将实例化的对象全部放于Factory ...
- 软件工程 - 设计模式学习之工厂方法模式Factory Method
在现实生活中我们可以看见,乐事在卖薯片,可比克也在卖. 我敢肯定的说它们各自都有自己的工厂来生产薯片,而且生产出来的薯片味道还是不一样的. 这就是我们这里所谓的工厂方法模式. 我们来看看这个模式的UM ...
- 工厂方法(Factory Pattern)
工厂方法模式定义:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法让类把实例化推迟到子类.(注:"决定"不是指模式允许子类本身在运行时做决定,而是指在编写创建者 ...
最新文章
- JAVA继承类phone_JAVA(9)继承与多态
- 光流 | OpenCV中的Lucas-Kanade光流与稠密光流:基于Opencv+Python(附代码)
- windows无法新建计算机对象,win10系统ie浏览器提示“Automation 服务器不能创建对象”的办法...
- dubbo学习之服务消费者
- .NetCore 下开发独立的(RPL)含有界面的组件包 (四)授权过滤
- vue.js 引用背景图 background 无效的3种解决办法
- MUI入门小白到大师 - 讲解
- 织梦响应式鲜花绿植花艺类网站模板(自适应手机端)
- 安卓更改目标sdk_您最近是否修改了目标?
- 安装Jmeter插件管理器
- 互利网上数字金融典型场景: 网络借贷
- 力扣—剑指 Offer 45. 把数组排成最小的数
- java 文件去除扩展名_使用Java删除所有带扩展名的文件
- 增删改查oracle sql,oracle sql增删改查
- vb.NET 关于进度条控件使用
- SKPlayer -- 一个超级简单好用的音乐插件+CSS+HTML+JS
- Panoramic Photography
- 计算机无法识别ipad,电脑无法识别iphone、ipad怎么办
- 常见的管道命令:sort、uniq、tr、cut
- python爬取音乐源码_手把手教你使用Python抓取QQ音乐数据(第一弹)
热门文章
- Bugku:加密 聪明的小羊
- Yolov3参数理解
- 蓝桥杯练习系统[C++]
- 学习机器学习,主要牵涉到哪些数学知识?
- VS编译错误C4996	'scanf': This function or variable may be unsafe.
- 常用的Excel公式
- Python中的姓名和身份证的打印
- 2021中国电信数据分析笔试
- 370A. Rook, Bishop and King codeforce题解
- 用 js判断 一个数是否是素数(质数)_小学五年级下册数学公式打印版,孩子考试用的上!...