简单工厂抽象工厂工厂方法_让工厂美丽

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

反面罩 每个名副其实的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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

枚举所有进程及其ID

#include<Windows.h>#include<TlHelp32.h> //声明快照函数的头文件#include<stdio.h>int main(int argc, char*argv[]){system("color 0A"); //设置底色PROCESSENTRY32 pe32; //声明该结构体变量//在使用这个结构前&#xff0…

内蒙古大学计算机组成原理实验,内蒙古大学计算机组成原理期末练习0

内蒙古大学计算机组成原理期末练习0 (4页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;9.9 积分第 1 页 共 4 页 《《计算机组成原理计算机组成原理》》期末练习期末练习 班级 专业 姓名 学号 编号 …

dev的编辑器不支持getchar吗_“两头婚兴起”:你支持不娶不嫁,孩子随父姓也随母姓吗?...

何为两头婚&#xff1f;简单来说就是男不娶&#xff0c;女不嫁&#xff0c;没有彩礼也没有嫁妆的说法。男女俩人结婚之后没有谁到谁家里之说&#xff0c;两夫妻过自己的小日子&#xff0c;与各自的原生家庭保持一定的联系。婚后生育两个孩子&#xff0c;一个随父姓&#xff0c;…

字符串操作之字符串拷贝功能实现

#include<iostream> using namespace std; //思路分析&#xff1a; //a.确定被拷贝的数组内存是否小于等于目标数组的内存大小 //b.拷贝数组 //c.目标数组最后一个字符为空字符(\0)//str1:被拷贝的数组 str2:目标数组 len:目标数组的长度 bool stringCopy(char* str1, ch…

2015年传智播客java_2015年的Java –重大事件

2015年传智播客java2015年是Java的一年&#xff0c;语言&#xff0c;平台&#xff0c;生态系统和社区继续主导着软件领域&#xff0c;只有Javascript对整个行业产生了类似的影响。 如果您错过了2015年的亮点&#xff0c;这里是发生的一些重大事件。 Java 20岁了&#xff0c;还…

vue 删除两个集合中相同的数据_vue.js如何删除数组里面的数据

vue.js如何删除数组里面的数据发布时间&#xff1a;2020-12-10 12:04:44来源&#xff1a;亿速云阅读&#xff1a;107作者&#xff1a;小新这篇文章主要介绍了vue.js如何删除数组里面的数据&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文…

字符串操作之字符串连接

/* 将str1与str2连接—->(将合成的字符串放入str1中) 思路分析: a. 确定str1的内存大小是否小于str1str2-1; b. 连接; c. 连接后的字符串最后一个为空字符(‘\0’)。 */ //str1-->存放最终连接字符串的数组 ,len--->str1的内存大小 #include<iostream> using na…

全国计算机证件照要露耳朵吗,结婚证照片要露耳朵么 结婚登记照露一只耳朵行吗...

结婚证件照&#xff0c;这是可以在在民政局里面照的&#xff0c;也是可以在外面的影楼照的&#xff0c;在外面影楼照的话&#xff0c;照出来会比较好看&#xff0c;就是价格有点贵。结婚证上面的照片是证件照&#xff0c;所以是有一定的要求的。露一只耳朵行不行呢&#xff1f;…

findfirst_当心findFirst()和findAny()

findfirst过滤Java 8 Stream &#xff0c;通常使用findFirst()或findAny()来获取在过滤器中幸存的元素。 但这可能并不能真正实现您的意思&#xff0c;并且可能会出现一些细微的错误。 那么 从我们的Javadoc&#xff08; 此处和此处 &#xff09;可以看出&#xff0c;这两种方…

儿童学python下哪个软件好用_【开源软件】超好用的Python学习软件!没有之一!...

可以观看视频&#xff01;文章结尾&#xff0c;有下载、安装方法&#xff01;曾几何时&#xff01;Python开始掀起了一阵狂猛的学习浪潮&#xff1f;Python那么Python为什么那么火&#xff1f;https://wenwen.sogou.com/z/q889141941.htm咱们在网上随便搜索&#xff0c;就是一大…

土木计算机2级,请教各位,我是学土木的,考计算机二级的哪个比较好?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼谁听说近来是开学季&#xff0c;听度娘说开学季有三倍经验&#xff0c;竟然有三倍经验&#xff1f;但是就算有三倍经验我也不会借这谁听说近来是开学季&#xff0c;听度娘说开学季有三倍经验&#xff0c;竟然有三倍经验&#xff1f…

javafx_JavaFX在这里留下来!

javafx上周在网上看到了一些有关JavaFX未来的讨论。 许多人给人以Oracle将JavaFX搁置的印象。 这主要是由Shai Almog&#xff08;代号为One&#xff09;撰写的博客文章“ Should Oracle Spring Clean JavaFX”引起的。 我早些时候写了一个博客&#xff0c;“它的灵感”来自于我…

ssms2008 代码自动提示_使用 SSMS 的提示和技巧 - SQL Server Management Studio (SSMS) | Microsoft Docs...

使用 SQL Server Management Studio (SSMS) 的提示和技巧Tips and tricks for using SQL Server Management Studio (SSMS)03/13/2018本文内容本文介绍了一些使用 SQL Server Management StudioSQL Server Management Studio (SSMS) 的提示和技巧。This article gives you some…

递增星号打印解析

#include<iostream> using namespace std;//输出一个5X5递增*号图形 //分析首先需要打印出5行&#xff0c;每行打印的*号数量与当前行数相同int main() {for (int i 1; i <5; i)//循环打印确定行数为5{for (int j 0;j<i;j)//从每行第一个位置开始打印&#xff0c;…

计算机接口控制采集时序图,自动站实时数据质量控制

自动站实时数据质量控制利用极值法、比较法、综合(本文共2页)阅读全文>>通过2次自动站实时数据质量控制失败的案例,分析总结了自动气象站实时数据质量控制的经验教训。结果表明:(1)值班员必须严格执行地面气象观测规范和各项规章制度;必须充分认识建立和运行实时自动气象…

jpa语法错误_JPA陷阱/错误

jpa语法错误根据我在帮助团队和进行培训方面的经验&#xff0c;这是我遇到的一些陷阱/错误&#xff0c;它们在使用JPA的基于Java的系统中引起了一些问题。 需要一个公共的无参数构造函数 始终使用双向关联/关系 将OneToMany用于可能庞大的集合 需要一个公共的无参数构造函数…

python源码文件以什么格式结尾结尾_查看python源码,发现里面的函数都以pass结尾,那么意义何在?...

例如&#xff1a;class str(object):"""str(object) -> strstr(bytes_or_buffer[, encoding[, errors]]) -> strCreate a new string object from the given object. If encoding orerrors is specified, then the object must expose a data bufferthat …

java流式传输对象_使用Java 8在地图上流式传输

java流式传输对象在本文中&#xff0c;我将向您展示如何在标准Java映射上有效地实现Speedment Open Source流&#xff0c;并将Stream接口扩展为MapStream&#xff01; 即使在复杂的情况下&#xff0c;此添加将使保持流的具体性和可读性变得更加容易。 希望这将允许您继续流式传…

计算机学术硕士课题,硕士学术论文选题的原则分析

硕士学术论文选题的原则分析选题作为硕士学术论文写作过程的第一步&#xff0c;也是最关键的一步&#xff0c;直接影响到论文写作整个过程中&#xff0c;包括资料收集&#xff0c;发现问题&#xff0c;解决问题等一系列工作&#xff0c;决定了整篇论文的成败。硕士学术论文是对…

选择排序与冒泡排序的区别

冒泡排序&#xff1a;冒泡排序&#xff08;BubbleSort&#xff09;的基本概念是&#xff1a;依次比较相邻的两个数&#xff0c;将小数放在前面&#xff0c;大数放在后面。即在第一趟&#xff1a;首先比较第1个和第2个数&#xff0c;将小数放前&#xff0c;大数 放后。然后比较第…