亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

工廠模式使用Java 8中的Lambda表達式

2019-11-06 06:23:58
字體:
來源:轉載
供稿:網友

原文地址:https://dzone.com/articles/factory-pattern-using-lambda-exPRession-in-java-8?utm_source=Top%205&utm_medium=email&utm_campaign=2017-03-04

工廠模式是Java中最著名的模式之一。 如果你使用lambda表達式,你可以使用它們來實現模式,但要小心縮放。

 通過 Monika Goel · 3月01日,17 · Java區

工廠模式是Java中最常用的設計模式之一。 這種類型的設計模式屬于主機的創造模式,因為這種模式提供了一種最好的方式來創建一個對象。 工廠設計模式允許您創建對象,而不將實例化邏輯暴露給客戶端。

在這篇文章中,我想給出一個Factory模式的示例,然后使用在Java 8中引入的lambda表達式重寫相同的示例。

工廠模式:一個例子

我將創建一個Shape接口以及實現Shape接口的具體類。 一個工廠類ShapeFactory被定義為下一步。

創建一個接口: Shape.java

public interface Shape {   void draw();}

考慮這個Shape接口的兩個實現: Circle.java & Rectangle.java

public class Rectangle implements Shape {   @Override   public void draw() {      System.out.println("Inside Rectangle::draw() method.");   }}public class Circle implements Shape {   @Override   public void draw() {      System.out.println("Inside Circle::draw() method.");   }}

創建工廠根據給定信息生成具體類的對象。

public class ShapeFactory {   //use getShape method to get object of type shape    public Shape getShape(String shapeType){      if(shapeType == null){         return null;      }      if(shapeType.equalsIgnoreCase("CIRCLE")){         return new Circle();      } else if(shapeType.equalsIgnoreCase("RECTANGLE")){         return new Rectangle();               }             return null;   }}

使用Factory通過傳遞類型為: FactoryPatternDemo.java的信息來獲取具體類的對象

public class FactoryPatternDemo {   public static void main(String[] args) {      ShapeFactory shapeFactory = new ShapeFactory();      //get an object of Circle and call its draw method.      Shape shape1 = shapeFactory.getShape("CIRCLE");      //call draw method of Circle      shape1.draw();      //get an object of Rectangle and call its draw method.      Shape shape2 = shapeFactory.getShape("RECTANGLE");      //call draw method of Rectangle      shape2.draw();   }}

驗證輸出:

Inside Circle::draw() method.Inside Rectangle::draw() method.

工廠模式:使用Lambda表達式的重構

在Java 8中,我們可以參考構造函數,就像我們引用方法一樣,通過使用 方法引用。 例如,下面是如何引用Circle構造函數:

Supplier<Shape> circleSupplier = Circle::new;Circle circle = circleSupplier.get();

使用這種技術,我們可以通過創建映射形狀的Map來重寫前面的代碼 名稱到其構造函數:

final static Map<String, Supplier<Shape>> map = new HashMap<>();  static {    map.put("CIRCLE", Circle::new);    map.put("RECTANGLE", Rectangle::new);  }

我們現在可以使用這個Map來實例化不同的形狀,就像我們以前的工廠代碼一樣:

public class ShapeFactory {  final static Map<String, Supplier<Shape>> map = new HashMap<>();  static {    map.put("CIRCLE", Circle::new);    map.put("RECTANGLE", Rectangle::new);  }     public Shape getShape(String shapeType){     Supplier<Shape> shape = map.get(shapeType.toUpperCase());     if(shape != null) {       return shape.get();     }     throw new IllegalArgumentException("No such shape " + shapeType.toUpperCase());  }}

使用工廠獲得具體類的對象,使用lambda表達式: FactoryPatternDemo.java

public class FactoryPatternDemo {   public static void main(String[] args) {     Supplier<ShapeFactory> shapeFactory =  ShapeFactory::new;  //call draw method of circle     shapeFactory.get().getShape("circle").draw();     //call draw method of Rectangle     shapeFactory.get().getShape("rectangle").draw();         }}

驗證輸出:

Inside Circle::draw() method.Inside Rectangle::draw() method.

這是一個相當整潔的方式使用Java 8功能來實現相同的意圖工廠模式。 但是這種技術不能很好地縮放,如果工廠方法getShape需要采取多個參數傳遞給Shape構造函數! 你必須提供與簡單的供應商不同的功能接口。


上一篇:Java 基礎隨筆

下一篇:Java 8 Lambda

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜伦理精品一区| 超碰91人人草人人干| 国产在线播放91| 久久精品久久精品亚洲人| 国产一区二区在线播放| 国产经典一区二区| 日韩成人在线播放| 欧美激情成人在线视频| 亚洲欧洲在线播放| 26uuu另类亚洲欧美日本一| 久久777国产线看观看精品| 欧美日韩在线观看视频| 欧美wwwwww| 亚洲社区在线观看| 亚洲999一在线观看www| 国产成人精品av| 国产精品一区二区久久国产| 国内精品久久久久久中文字幕| 欧美资源在线观看| 国产日韩欧美另类| 欧美日韩成人在线视频| 91亚洲永久免费精品| 欧美日韩国产123| 日韩色av导航| 亚洲色图25p| 国产精品视频播放| 精品国产福利在线| 欧美成人精品在线| 91午夜在线播放| 成人国产亚洲精品a区天堂华泰| 国产97色在线| 91精品国产自产在线老师啪| 日韩中文字幕在线| 91深夜福利视频| 国产精品自产拍高潮在线观看| 国产成人免费av| 精品国产精品三级精品av网址| 亚洲欧美综合v| 欧美激情精品久久久久| 亚洲高清在线观看| 亚洲色图在线观看| 中文字幕日韩专区| 国产精品白嫩初高中害羞小美女| 日韩免费av片在线观看| 亚洲精品电影网站| 伦伦影院午夜日韩欧美限制| 国产精品久久久久久网站| 欧美性猛交xxxx乱大交| 26uuu日韩精品一区二区| 91禁国产网站| 亚洲aa中文字幕| 色爱av美腿丝袜综合粉嫩av| 免费99精品国产自在在线| 亚洲区免费影片| 日韩专区中文字幕| 8050国产精品久久久久久| 国产成人精品在线| 日韩精品久久久久| 精品无码久久久久久国产| 精品国产网站地址| 成人av在线天堂| 搡老女人一区二区三区视频tv| 亚洲美女精品久久| 97免费视频在线| 国产网站欧美日韩免费精品在线观看| 亚洲男人第一网站| 菠萝蜜影院一区二区免费| 亚洲高清免费观看高清完整版| 亚洲三级黄色在线观看| 国产成人福利视频| 久久噜噜噜精品国产亚洲综合| 久久久国产视频| 亚洲a级在线观看| 久久久人成影片一区二区三区| 国产视频亚洲视频| 色妞久久福利网| 欧美性感美女h网站在线观看免费| 欧美专区国产专区| 亚洲在线免费观看| 久久久999国产精品| 久久精彩免费视频| 国产日韩欧美日韩| 国产精品99久久久久久人| 国产欧洲精品视频| 中文字幕一区二区三区电影| 久久久国产精品一区| 91在线|亚洲| 国内偷自视频区视频综合| 久久全球大尺度高清视频| 亚洲国语精品自产拍在线观看| 国产视频久久久久| 日韩视频在线免费| 美女国内精品自产拍在线播放| 高清在线视频日韩欧美| 在线观看欧美www| 91久久久亚洲精品| 成人做爽爽免费视频| 亚洲国产精品人久久电影| 不卡av电影在线观看| 久久久国产精彩视频美女艺术照福利| 久久国产精品99国产精| 成人免费视频xnxx.com| 在线播放国产精品| 久久夜色精品国产亚洲aⅴ| 色青青草原桃花久久综合| 日本精品视频在线播放| 91国产一区在线| 日韩av在线免费播放| 欧美色欧美亚洲高清在线视频| 亚洲专区在线视频| 亚洲国内高清视频| 亚洲香蕉成视频在线观看| 欧美国产精品日韩| 91免费观看网站| 日韩经典中文字幕在线观看| 欧美自拍视频在线| 精品国产拍在线观看| 国产精品女人久久久久久| 成人av番号网| 欧美性猛交视频| 亚洲激情自拍图| 日本精品久久久久久久| 国产一区二区三区直播精品电影| 一本色道久久88综合日韩精品| 国产日韩精品电影| 国产精品一区久久久| 热门国产精品亚洲第一区在线| 国产亚洲精品日韩| 欧美在线www| 97视频人免费观看| 日韩av免费在线看| 日韩中文字幕欧美| 欧美综合在线第二页| 欧美日韩性视频| 欧美国产激情18| 国产成人精品视频在线| 国产精品日韩欧美| 日韩视频免费观看| 日本成人黄色片| 一区二区欧美在线| 欧美黑人视频一区| 亚洲欧美激情另类校园| 欧美在线观看www| 欧美一区第一页| 国内精品小视频| 中文字幕日韩精品有码视频| 国产精品自产拍在线观| 成人精品视频在线| 91丝袜美腿美女视频网站| 色妞在线综合亚洲欧美| 国产精品久久77777| 九九精品视频在线| 欧美日韩综合视频| 亚洲黄色在线看| 久久亚洲欧美日韩精品专区| 91禁国产网站| 国产在线视频欧美| 亚洲www在线观看| 欧美日韩性视频| 欧美最猛性xxxxx免费| 一本色道久久88综合亚洲精品ⅰ| 91色琪琪电影亚洲精品久久| 色婷婷久久av| 中文字幕日韩精品在线|