系列文章目录
例如:第一章 Python 机器学习入门之pandas的使用
创建型模式:
[1] 工厂方法模式
结构型模式:
工厂方法模式简介
创建型模式
:提供创建对象的机制, 能够提升已有代码的灵活性和可复用性。
工厂方法模式:是一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型。
一、问题
假设你正在开发一款物流管理应用。 最初版本只能处理卡车运输, 因此大部分代码都在位于名为 卡车
的类中。
一段时间后, 这款应用变得极受欢迎。 你每天都能收到十几次来自海运公司的请求, 希望应用能够支持海上物流功能。
但是代码问题该如何处理呢? 目前, 大部分代码都与卡车
类相关。 在程序中添加 轮船
类需要修改全部代码。 更糟糕的是, 如果你以后需要在程序中支持另外一种运输方式, 很可能需要再次对这些代码进行大幅修改。
最后, 你将不得不编写繁复的代码, 根据不同的运输对象类, 在应用中进行不同的处理。
二、解决方法
1.整合公共的方法,比如,无论是陆运还是海运,都是有 deliver()
送货方法。
2.创建工厂方法,创建对象通过子类实现。
三、代码实现
1.整合公共方法
// 运输方式接口,封装了运送方法
interface Transport{
public void deliver();
}
// 卡车
class Truck implements Transport{
public void deliver(){
System.out.println("货物在盒子中,以陆路方式运输 ");
}
}
// 轮船
class Ship implements Transport{
public void deliver(){
System.out.println("货物在集装箱中,以海陆的方式运输");
}
}
2.创建工厂
// 物流工厂
abstract class LogisticsFactory{
abstract Transport chooseTransport();
}
// 道路物流
class RoadLogistics extends LogisticsFactory{
@Override
Transport chooseTransport() {
// ....
return new Truck();
}
}
// 海陆物流
class SeaLogistics extends LogisticsFactory{
@Override
Transport chooseTransport() {
// ....
return new Ship();
}
}
- main方法调用
public class FactoryMethod {
public static void main(String[] args) {
String s = "road";
LogisticsFactory logistics;
if( s.equals("road")){ // 根据条件选择交通方式,创建对象即可
logistics = new RoadLogistics();
}else {
logistics = new SeaLogistics();
}
Transport transport = logistics.chooseTransport();
transport.deliver();
}
}