Java 8 中的工厂方法模式
为什么80%的码农都做不了架构师?>>>
先唠叨一句工厂方法模式的定义:
定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。
示例
先举一个汽车的栗子
<!-- lang: java -->
interface Vehicle {public void drive();public void clean();
}class Car implements Vehicle {@Overridepublic void drive() {System.out.println("Driving a car...");}@Overridepublic void clean() {System.out.println("Cleaning a car...");}
}class Bus implements Vehicle {@Overridepublic void drive() {System.out.println("Driving a Bus...");}@Overridepublic void clean() {System.out.println("Cleaning a Bus...");}
}
Java 7 及其之前版本的工厂方法
<!-- lang: java -->
abstract class VehicleDriver {public abstract Vehicle getVehicle();public void driveVehicle() {getVehicle().drive();}public void cleanVehicle() {getVehicle().clean();}
}class CarDriver extends VehicleDriver {@Overridepublic Vehicle getVehicle() {return new Car();}
}class BusDriver extends VehicleDriver {@Overridepublic Vehicle getVehicle() {return new Bus();}
}
在使用时
<!-- lang: java -->
public class FactoryMethodPattern {public static void main(String[] args) {handleVehicle(new CarDriver());handleVehicle(new BusDriver());}static void handleVehicle(VehicleDriver2 vDriver) {System.out.println("Handling a new vehicle. Pre lambda way");vDriver.driveVehicle();vDriver.cleanVehicle();}
}
Java 8 中的工厂方法
在 Java 8 中,我们可以通过 Lambda 来简化工厂方法的实现
<!-- lang: java -->
interface VehicleDriver {public Vehicle getVehicle();public default void driveVehicle() {getVehicle().drive();}public default void cleanVehicle() {getVehicle().clean();}
}public class FactoryMethodPatternLambda {public static void main(String[] args) {handleVehicle(Car::new); // Method referencehandleVehicle(() -> new Bus()); // Closure}static void handleVehicle(VehicleDriver vDriver) {System.out.println("Handling a new vehicle...");vDriver.driveVehicle();vDriver.cleanVehicle();}
}
方法接口
在 Java 8 中引入了方法接口这个概念,其定义是只包含一个方法定义的接口(新引入的默认方法不算,因为它算是方法实现)。在本例中,VehicleDriver 就是一个方法接口。在 Java 8 中可以通过使用闭包和方法引用的方式简化对方法接口的使用。
使用闭包时,闭包就会自动作为方法接口中唯一的方法定义的实现。使用方法引用时,方法引用则会被调用,其返回值被作为方法接口中的方法定义的返回值。
方法引用与闭包
相比较方法引用和闭包,我更倾向于后者,因为其语法更为清晰易懂,也容易扩展。因为很多时候你不只是需要 new 一个新对象,还需要做很多别的事情。这时,使用闭包就变得很容易实现这个目的了。
转载于:https://my.oschina.net/lifany/blog/135057
Java 8 中的工厂方法模式相关推荐
- Java 设计模式之静态工厂方法模式
设计模式系列 创建型设计模式 Java 设计模式之单例模式 Java 设计模式之静态工厂方法模式 Java 设计模式之工厂方法模式 Java 设计模式之抽象工厂模式 Java 设计模式之Builder ...
- java 工厂方法模式_Java中的工厂方法模式
java 工厂方法模式 在上一篇有关模板方法模式的文章中 ,我展示了如何利用lambda表达式和默认方法 . 在本文中,我将探讨工厂方法模式,并了解如何利用方法引用,这是Java 8中与lambda表 ...
- Java中的工厂方法模式
在我以前关于模板方法模式的文章中 ,我展示了如何利用lambda表达式和默认方法 . 在本文中,我将探讨工厂方法模式,并了解如何利用方法引用,这是Java 8中与lambda表达式一起添加的另一项功能 ...
- JAVA【设计模式】工厂方法模式
工厂方法模式 一.定义 二.示例: 传统硬编码方式(都在一个类里面实现,多重if else嵌套使用) 工厂方法模式设计 一.定义 ⼯⼚模式⼜称⼯⼚⽅法模式,是⼀种创建型设计模式,其在⽗类中提供⼀个创建 ...
- java简单工厂模式实例造车,JAVA设计模式学习5——工厂方法模式
工厂方法模式(Factory Method)又称虚拟构造子模式,可以说是简单工厂的抽象,也可以理解为简单工厂是退化了的工厂方法模式,其表现在简单工厂丧失了工厂方法的多态性.我们前一节中提到当产品结构变 ...
- swift 听筒模式_Swift中的“工厂方法”模式
swift 听筒模式 定义 (Definition) 'Factory Method' pattern is a creational design pattern that abstracts th ...
- java中factory_JAVA工厂方法模式(Factory Method)
1.普通工厂模式 普通工厂模式:就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建. 1-1.建立Sender接口 public interface Sender { public void ...
- 工厂方法模式java实例,设计模式之工厂方法模式实例(Java)
海尔工厂(Haier)生产海尔空调(HaierAirCondition),美的工厂(Midea)生产美的空调(MideaAirCondition) .使用工厂方法模式描述该场景,绘制类图并编程实现. ...
- WebRequest中的工厂方法模式
转载于:https://www.cnblogs.com/taomylife/p/3591197.html
最新文章
- 创建一个简单的存储过程(RroGetA_Z),要求输出A到Z之间的26个大写字母
- commons-collections使用介绍之Bag HashBag
- ImportError: dynamic module does not define module export function (PyInit_example)
- python django restful_详解Django rest_framework实现RESTful API
- 十七、去年jQuery的笔记
- LeetCode-- Unique Binary Search Trees II
- .net core json 为null输出_SpringBoot实战(九):标准化json返回值
- 计算机二级C选择题精华
- Linux 命令(40)—— nohup 命令
- oracle 创建备份目录,Oracle rman创建和自动化备份
- iOS底层探索之多线程(九)—GCD源码分析(栅栏函数)
- Python 代码使用pdb调试技巧
- sql server2012 远程访问设置(转)
- 在Web上运行Linux
- springboot+vue+easychart报表导出前后台
- u2000网管服务器系统安装,U2000网管预安装后无法登陆
- 好用的PDF解密工具哪个好?
- QString 中文编码转换
- 重启计算机后回收站,电脑回收站文件被清空了该如何恢复
- php去除换行(回车换行)的方法