简单工厂抽象工厂工厂方法

每个名副其实的Java程序员都知道Factory Pattern 。 这是一种便捷,标准化的方法,它通过教一个组件如何捕鱼而不是将它们交给它们来减少耦合。 但是,在使用大型系统时,该模式确实会向系统添加很多样板代码。 对于每个实体,您都需要许多不同的工厂来产生该实体的不同实现,这既麻烦又不需要编写。 这只是我们在Speedment中使用的许多新模式之一 。

这是一个典型的示例,您希望汽车商人能够在不知道确切实现的情况下创建Car接口的实例。

汽车.java

public abstract class Car {private final Color color;public interface Factory {Car make(Color color);}protected Car(Color color) {this.color = color;}public abstract String getModel();public abstract int getPrice();
}

沃尔沃

public final class Volvo extends Car {public Volvo(Color color) {super(color);}public String getModel() { return "Volvo"; }public int getPrice() { return 10_000; } // USD
}

特斯拉

public final class Tesla extends Car {public Tesla(Color color) {super(color);}public String getModel() { return "Tesla"; }public int getPrice() { return 86_000; } // USD
}

VolvoFactory.java

public final class VolvoFactory implements Car.Factory {public Car make(Color color) { return new Volvo(color); }
}

TeslaFactory.java

public final class TeslaFactory implements Car.Factory {public Car make(Color color) { return new Tesla(color); }
}

CarTrader.java

public final class CarTrader {private Car.Factory factory;private int cash;public void setSupplier(Car.Factory factory) {this.factory = factory;}public Car buyCar(Color color) {final Car car = factory.make(color);cash += car.getPrice();return car;}
}

Main.java

...final CarTrader trader = new CarTrader();trader.setSupplier(new VolvoFactory());final Car a = trader.buyCar(Color.BLACK);final Car b = trader.buyCar(Color.RED);trader.setSupplier(new TeslaFactory());final Car c = trader.buyCar(Color.WHITE);...

您可能尚未注意到的一件事是,大多数这些组件在Java 8及更高版本中都是多余的。 由于工厂接口可能被视为@FunctionalInterface我们不需要工厂,因此我们只需指定实现类的构造函数作为方法参考即可!

汽车.java

public abstract class Car {private final Color color;@FunctionalInterfacepublic interface Factory {Car make(Color color);}
}

Main.java

...trader.setSupplier(Volvo::new);trader.setSupplier(Tesla::new);...

注意,实现类VolvoTesla不需要更改。 这两个工厂现在都可以拆除了,剩下的就是更为具体的系统!

(对于像这样的简单示例,根本不需要工厂接口。您也可以使CarTrader接受Function<ColorCar> 。为工厂指定接口的优点在于,两者都更容易实现理解,它允许您更改构造函数的参数,而无需更改使用工厂的代码。)

翻译自: https://www.javacodegeeks.com/2016/02/make-factories-beautiful.html

简单工厂抽象工厂工厂方法

简单工厂抽象工厂工厂方法_让工厂美丽相关推荐

  1. 设计模式 工厂方法_使用工厂方法模式设计最佳实践

    设计模式 工厂方法 在前面的"设计模式"示例中,我们解释了当今常用的"工厂"模式. 在本节中,我们将了解具有更多抽象的更高级的解决方案. 该模式称为工厂方法设计 ...

  2. 异星工厂服务器资源修改,异星工厂存档怎么改到别的地方 异星工厂存档位置修改方法_游侠网...

    异星工厂存档怎么改到别的地方想必有些小伙伴还不是很清楚的吧,所以呢今天小编就为大家带来了异星工厂存档位置修改方法,一起来了解一下吧. 异星工厂存档位置修改方法 首先我们找到 Factorio异星工厂的 ...

  3. inventor软件绘制百叶窗方法_三维工厂设计该使用什么软件?

    背景简介 OpenPlant Modeler (以下简称OPM)是一款精确.快捷的三维工厂设计软件.它通过数据信息的交互提高项目团队的协同能力,通过遵循ISO 15926标准,应用i-model技术, ...

  4. 工厂设计模式解决什么问题_使用工厂模式解决设计问题

    工厂设计模式解决什么问题 工厂设计模式是面向对象环境中最常用的模式之一. 再次来自"创意设计"模式类别,即有关对象创建的所有信息. 在某些情况下,对象的创建很复杂,可能需要某种程度 ...

  5. 智慧工厂用到的技术_智慧工厂如何实现智能化

    传统工厂到智慧工厂的变革必然会成为未来世界制造业中最大的一波"浪潮",传统工厂如何快速实现角色的转换?我们认为,设备间的互联互通是关键.本文引用地址:http://www.eepw ...

  6. 智慧工厂用到的技术_智慧工厂的九大技术走向

    原标题:智慧工厂的九大技术走向 现在,我们正处于第四波工业浪潮中:新兴的数字技术产业被称为工业4.0,具体即指九项基础技术进步驱动的转型.智慧工厂作为工业4.0最主要的应用实体,起到工业4.0的承载和 ...

  7. 智慧工厂用到的技术_智慧工厂需要解决哪些问题及技术实现?

    麦肯锡全球研究院最新预测,到2025年智慧工厂带来的经济影响价值将达每年1.2万亿美元至3.7万亿美元.埃森哲联合Frontier Economics预估了智慧工厂和工业物联网对中国12个产业的累计G ...

  8. getresourceasstream方法_【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】...

    文章系列目录(持续更新中): [设计模式]第一篇:概述.耦合.UML.七大原则,详细分析总结(基于Java) [设计模式]第二篇:单例模式的几种实现And反射对其的破坏 一 为什么要用工厂模式 之前讲 ...

  9. 【Java设计模式】简单学抽象工厂模式——你好,微信还是支付宝

    目录 说明 实现方式 自问自答 其他链接 说明 五大创建型模式之一,其他还有单例模式.原型模式.建造者模式.工厂模式. 抽象工厂模式(Abstract Factory Pattern):定义了一个in ...

最新文章

  1. pip install models ModuleNotFoundError: No module named ‘base‘
  2. twitter 监控登陆活动
  3. MATLAB入门(二)
  4. 操作系统内存管理问题集锦
  5. MySQL数据库事务及其特性
  6. 共享单车或开启了物联网的大门,新的变革即将开启
  7. 使用git将本地仓库上传到远程仓库
  8. python progressbar 倒计时_Python使用progressbar模块实现的显示进度条功能
  9. 从头搭建drbd+openfiler+corosync (二)
  10. leetcode-longestPalindrome-java
  11. 获取手机本地的图片或者照相机照像的图片 为头像
  12. ffmpeg系列之两种视频解码方式
  13. Label Consistent Matrix Factorization Hashingfor Large-Scale Cross-Modal Similarity Search(LC)--文献翻译
  14. 升级Win10注意事项个人总结
  15. 成员在类中的偏移量 类成员指针
  16. 李沐华:变革前夜的券商集中交易系统
  17. c语言猜12生肖一种,12生肖2017年运程完整版十二生肖中最老的是哪个生肖_脑筋急转弯_算......
  18. 当地图遇到微博,生活其实可以这么玩
  19. python 爬虫登录获取数据失败_python 爬虫:验证码一直错误
  20. 阿里云混合云密码应用分析

热门文章

  1. 1.14 日志(递推ybtoj)
  2. CF848E-Days of Floral Colours【dp,分治NTT】
  3. 欢乐纪中某A组赛【2019.7.12】
  4. jzoj4244-yi【贪心】
  5. P1196 ssl1225-银河英雄传说【图论,并查集】
  6. ssl1007 and ssl -最大乘积 and 加法最大【区间dp练习】
  7. 操作系统复习笔记 02-03 OS Structure 操作系统结构
  8. 13、play中实现信息国际化
  9. play框架入门操作
  10. 深入探索 Java 热部署