中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

WordPress旋轉(zhuǎn)圖標seo模板建站

WordPress旋轉(zhuǎn)圖標,seo模板建站,ps怎么做網(wǎng)站設(shè)計,中文網(wǎng)頁設(shè)計案例欣賞1. 概述 建造者模式也稱為:生成器模式 定義:建造者模式是一種創(chuàng)建型設(shè)計模式,它允許你將創(chuàng)建復雜對象的步驟與表示方式相分離。 解釋:建造者模式就是將復雜對象的創(chuàng)建過程拆分成多個簡單對象的創(chuàng)建過程,并將這些簡單…

1. 概述

建造者模式也稱為:生成器模式

定義:建造者模式是一種創(chuàng)建型設(shè)計模式,它允許你將創(chuàng)建復雜對象的步驟與表示方式相分離。

解釋:建造者模式就是將復雜對象的創(chuàng)建過程拆分成多個簡單對象的創(chuàng)建過程,并將這些簡單對象組合成復雜對象!

2. 優(yōu)缺點

優(yōu)點

缺點

  1. 靈活:可以分步驟地構(gòu)建復雜對象,使得構(gòu)建過程更加靈活。
  1. 增加工作量:需要額外的代碼來創(chuàng)建和管理具體建造者類,增加工作量。
  1. 解耦:可以隔離復雜對象的創(chuàng)建和使用,客戶端不必關(guān)心對象的創(chuàng)建細節(jié)。
  1. 效率低:相比于其他創(chuàng)建型模式,在運行時效率較低,特別是對象過于復雜時。
  1. 易擴展:增加新的具體建造者很方便,可以擴展構(gòu)建器功能,符合開閉原則。

3. 結(jié)構(gòu)

建造者模式包含以下幾個主要角色:

  • 產(chǎn)品(Product)要構(gòu)建的復雜對象;產(chǎn)品類通常包含多個部分或者屬性,并由具體的建造者逐步構(gòu)建而成。
  • 抽象建造者(Builder)定義了構(gòu)建產(chǎn)品的抽象接口,包括構(gòu)建產(chǎn)品的各個部分的方法;通常包括多個構(gòu)建方法和一個返回產(chǎn)品的方法。
  • 具體建造者(Concrete Builder)實現(xiàn)了抽象建造者接口,具體確定如何構(gòu)建產(chǎn)品的各個部分,并負責返回最終構(gòu)建的產(chǎn)品。
  • 指導者(Director)負責調(diào)用建造者的方法來構(gòu)建產(chǎn)品;指導者并不了解具體的構(gòu)建過程,只關(guān)心產(chǎn)品的構(gòu)建順序和方式。

4. 代碼實現(xiàn)

4.1. 需求介紹

我們假設(shè)一個快餐店的商業(yè)案例,其中,一個典型的套餐可以是一個漢堡(Burger)和一杯冷飲(Cold drink)。漢堡(Burger)可以是素食漢堡(Veg Burger)或雞肉漢堡(Chicken Burger),它們是包在紙盒中。冷飲(Cold drink)可以是可口可樂(coke)或百事可樂(pepsi),它們是裝在瓶子中。

我們將創(chuàng)建一個表示食物條目(比如漢堡和冷飲)的 Item 接口和實現(xiàn) Item 接口的實體類,以及一個表示食物包裝的 Packing 接口和實現(xiàn) Packing 接口的實體類,漢堡是包在紙盒中,冷飲是裝在瓶子中。

然后我們創(chuàng)建一個 Meal 類,帶有 ItemArrayList 和一個通過結(jié)合 Item 來創(chuàng)建不同類型的 Meal 對象的 MealBuilder。BuilderPatternDemo 類使用 MealBuilder 來創(chuàng)建一個 Meal

4.2. 代碼演示

  1. 創(chuàng)建一個代表食物條目和食物包裝的接口。
/*** @Description 食品條目接口* @Author gongming.Zhang* @Date 2024/11/1 15:54* @Version 1.0*/
public interface Item {// 商品名稱String name();// 包裝類型 (紙盒、瓶子)Packing packing();// 價格float price();
}
package top.zhang.builderdesignpatterns.entity.packing;/*** @Description 食物包裝條目接口* @Author gongming.Zhang* @Date 2024/11/1 15:56* @Version 1.0*/
public interface Packing {// 包裝類型(紙盒、瓶子)String pack();
}

  1. 創(chuàng)建并實現(xiàn) Packing 接口的實體類。
/*** @Description 紙盒實現(xiàn)類* @Author gongming.Zhang* @Date 2024/11/1 15:57* @Version 1.0*/
public class Wrapper implements Packing {@Overridepublic String pack() {return "Wrapper";}
}
/*** @Description 瓶子實現(xiàn)類* @Author gongming.Zhang* @Date 2024/11/1 15:58* @Version 1.0*/
public class Bottle implements Packing {@Overridepublic String pack() {return "Bottle";}
}

  1. 創(chuàng)建并實現(xiàn) Item接口的抽象類,該類提供默認的功能。
/*** @Description 漢堡抽象類* @Author gongming.Zhang* @Date 2024/11/1 16:00* @Version 1.0*/
public abstract class Burger implements Item {@Overridepublic Packing packing() {return new Wrapper();}@Overridepublic abstract float price();
}
/*** @Description 冷飲抽象類* @Author gongming.Zhang* @Date 2024/11/1 16:24* @Version 1.0*/
public abstract class ColdDrink implements Item {@Overridepublic Packing packing() {return new Bottle();}@Overridepublic abstract float price();
}

  1. 創(chuàng)建并繼承 BurgerColdDrink
/*** @Description 雞肉漢堡實體類* @Author gongming.Zhang* @Date 2024/11/1 16:28* @Version 1.0*/
public class ChickenBurger extends Burger {@Overridepublic String name() {return "Chicken Burger";}@Overridepublic float price() {return 50.5f;}
}
/*** @Description 素食漢堡實體類* @Author gongming.Zhang* @Date 2024/11/1 16:26* @Version 1.0*/
public class VegBurger extends Burger {@Overridepublic String name() {return "Veg Burger";}@Overridepublic float price() {return 25.0f;}
}
/*** @Description 可口可樂實體類* @Author gongming.Zhang* @Date 2024/11/1 16:28* @Version 1.0*/
public class Coke extends ColdDrink {@Overridepublic String name() {return "Coke";}@Overridepublic float price() {return 30.0f;}
}
/*** @Description 百事可樂實體類* @Author gongming.Zhang* @Date 2024/11/1 16:30* @Version 1.0*/
public class Pepsi extends ColdDrink {@Overridepublic String name() {return "Pepsi";}@Overridepublic float price() {return 35.0f;}
}

  1. 創(chuàng)建一個 Meal 類,表示菜品實體。(產(chǎn)品)
package top.zhang.builderdesignpatterns.entity;import top.zhang.builderdesignpatterns.entity.food.Item;import java.util.ArrayList;
import java.util.List;/*** @Description 菜品實體類  ——  產(chǎn)品* @Author gongming.Zhang* @Date 2024/11/1 16:31* @Version 1.0*/
public class Meal {private List<Item> items = new ArrayList<Item>();public void addItem(Item item) {items.add(item);}/*** 獲取購買的商品總價** @return 商品總價格*/public float getCost() {float cost = 0.0f;for (Item item : items) {cost += item.price();}return cost;}/*** 展示購買的商品信息**/public void showItems() {for (Item item : items) {System.out.print("Item : "+item.name());System.out.print(", Packing : "+item.packing().pack());System.out.println(", Price : "+item.price());}}
}

  1. 創(chuàng)建一個 MealBuilder 類,實際的 builder 類負責創(chuàng)建 Meal 對象。(具體建造者)
package top.zhang.builderdesignpatterns.entity;import top.zhang.builderdesignpatterns.entity.food.entity.ChickenBurger;
import top.zhang.builderdesignpatterns.entity.food.entity.Coke;
import top.zhang.builderdesignpatterns.entity.food.entity.Pepsi;
import top.zhang.builderdesignpatterns.entity.food.entity.VegBurger;/*** @Description 負責構(gòu)建 Meal 對象  ——  具體建造者* @Author gongming.Zhang* @Date 2024/11/1 16:34* @Version 1.0*/
public class MealBuilder {/*** 構(gòu)建蔬菜餐數(shù)據(jù)** @return 菜品實體類*/public Meal prepareVegMeal() {Meal meal = new Meal();meal.addItem(new VegBurger());meal.addItem(new Coke());return meal;}/*** 構(gòu)建非蔬菜餐數(shù)據(jù)** @return 菜品實體類*/public Meal prepareNonVegMeal() {Meal meal = new Meal();meal.addItem(new ChickenBurger());meal.addItem(new Pepsi());return meal;}
}

  1. 測試建造者模式
@SpringBootTest
@RunWith(SpringRunner.class)
class BuilderDesignPatternsApplicationTests {@Testpublic void BuilderPatternDemo() {MealBuilder mealBuilder = new MealBuilder();Meal vegMeal = mealBuilder.prepareVegMeal();System.out.println("Veg Meal");vegMeal.showItems();System.out.println("total Cost: " + vegMeal.getCost());System.out.println("\n\n");Meal nonVegMeal = mealBuilder.prepareNonVegMeal();System.out.println("Non-Veg Meal");nonVegMeal.showItems();System.out.println("Total Cost: " +nonVegMeal.getCost());}
}

5. 總結(jié)

使用場景

  • 當需要創(chuàng)建一些特定的對象,但是它們擁有共同的組成部分時,比如:一個房子可以由個個部件:框架、墻、窗戶等,這些部件可以組合起來構(gòu)造完整的房子。
  • 當對象的構(gòu)建過程比較復雜且需要多個步驟時,例如,創(chuàng)建一份電子商務(wù)訂單需要多個步驟,如選擇商品、填寫地址和支付等,這些步驟可以被分別封裝成為訂單構(gòu)建器中的不同方法。
  • 當需要創(chuàng)建一些特定類型的對象,例如復雜的數(shù)據(jù)結(jié)構(gòu)或配置對象時,這在編寫配置文件解析器以及通用數(shù)據(jù)結(jié)構(gòu)如二叉樹等時很有用。
  • 建造者模式也可以被用于通過更高級的方式來構(gòu)建復雜對象,例如:序列化和反序列化。

與抽象工廠模式的區(qū)別

抽象工廠模式強調(diào)的是產(chǎn)品族的創(chuàng)建,即相關(guān)的產(chǎn)品一起被創(chuàng)建出來,而建造者模式強調(diào)的是一個復雜對象的創(chuàng)建,即它的各個部分逐步被創(chuàng)建出來。

http://m.risenshineclean.com/news/58391.html

相關(guān)文章:

  • 做ppt介紹網(wǎng)站嗎抖音關(guān)鍵詞排名軟件
  • 主流建站cms品牌seo培訓咨詢
  • 大唐工作室 網(wǎng)站制作天貓seo搜索優(yōu)化
  • 做游戲網(wǎng)站教程百度seo是啥意思
  • 手機網(wǎng)站解析域名百度一下你就知道了
  • 網(wǎng)站推廣辦法百度seo搜搜
  • 網(wǎng)站制作大型公司西安網(wǎng)絡(luò)推廣公司網(wǎng)絡(luò)推廣
  • 佛山網(wǎng)站制作網(wǎng)址不付費免費網(wǎng)站
  • 泰國男女做那個視頻網(wǎng)站百度鏈接提交入口
  • 高端品牌網(wǎng)站建設(shè)哪家好愛站
  • 關(guān)于做網(wǎng)站的google play store
  • 專業(yè)網(wǎng)站設(shè)計制作費用昆明關(guān)鍵詞優(yōu)化
  • 服裝品牌網(wǎng)站怎么做如何開網(wǎng)店
  • 怎么樣創(chuàng)建一個網(wǎng)站產(chǎn)品線上營銷方案
  • 一個人可以做幾個網(wǎng)站負責人灰色詞排名推廣
  • 做一家網(wǎng)站需要多少錢網(wǎng)絡(luò)營銷推廣策劃書
  • 大眾軟件回應(yīng)中國芯片行業(yè)最大投資seo排名優(yōu)化公司哪家好
  • 溫州網(wǎng)站建設(shè)服務(wù)電子商務(wù)網(wǎng)絡(luò)公司優(yōu)化seo深圳
  • 網(wǎng)站上上傳圖片 怎么做社交網(wǎng)絡(luò)推廣方法
  • 公司剛成立網(wǎng)站怎么做如何推廣我的網(wǎng)站
  • 制作微網(wǎng)站公司軟文新聞發(fā)布網(wǎng)站
  • ih5平臺發(fā)展前景關(guān)鍵詞優(yōu)化
  • 一級a做爰片免費無碼網(wǎng)站seo關(guān)鍵詞優(yōu)化的技巧
  • 廣東省做農(nóng)業(yè)網(wǎng)站銷售的公司上海seo招聘
  • 做公司網(wǎng)站比較好的寧波網(wǎng)站推廣平臺效果好
  • 網(wǎng)站引導頁怎么做的做個公司網(wǎng)站多少錢
  • 一級a做爰片完整網(wǎng)站網(wǎng)站搭建需要多少錢?
  • 山西運城網(wǎng)站開發(fā)seo就業(yè)前景如何
  • 互聯(lián)網(wǎng)公司網(wǎng)站建設(shè)ppt模板下載站長素材免費下載
  • 網(wǎng)站架構(gòu)設(shè)計師蘋果cms永久免費建站程序