日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php框架 > 框架設(shè)計 > 設(shè)計模式:建造模式

設(shè)計模式:建造模式

來源:程序員人生   發(fā)布時間:2015-01-14 09:11:50 閱讀次數(shù):4044次

原文地址:http://leihuang.org/2014/12/03/builder/

Creational 模式

物件的產(chǎn)生需要消耗系統(tǒng)資源,所以如何有效力的產(chǎn)生、管理 與操作物件,1直都是值得討論的課題, Creational 模式即與物件的建立相干,在這個分類下的模式給出了1些指點原則及設(shè)計的方向。下面羅列到的全屬于Creational 模式

  • Simple Factory 模式
  • Abstract Factory 模式
  • Builder 模式
  • Factory Method 模式
  • Prototype 模式
  • Singleton 模式
  • Registry of Singleton 模式

出現(xiàn)的問題

The builder pattern is a good choice when designing classes whose constructors or static factories would have more than a handful of parameters.

當(dāng)構(gòu)造函數(shù)的參數(shù)非常多時,并且有多個構(gòu)造函數(shù)時,情況以下:

Pizza(int size) { ... } Pizza(int size, boolean cheese) { ... } Pizza(int size, boolean cheese, boolean pepperoni) {...} Pizza(int size, boolean cheese, boolean pepperoni ,boolean bacon) { ... }

This is called the Telescoping Constructor Pattern. 下面還有1種解決方法叫javabean模式:

Pizza pizza = new Pizza(12); pizza.setCheese(true); pizza.setPepperoni(true); pizza.setBacon(true);

Javabeans make a class mutable even if it is not strictly necessary. So javabeans require an extra effort in handling thread-safety(an immutable class is always thread safety!).詳見:JavaBean Pattern

建造模式解決該問題
<span style="font-weight: normal;">public class Pizza { // 必須的 private final int size; // 可有可無的 private boolean cheese; private boolean pepperoni; private boolean bacon; public static class Builder { // required private final int size; // optional private boolean cheese = false; private boolean pepperoni = false; private boolean bacon = false; //由于size時必須的,所以設(shè)置為構(gòu)造函數(shù)的參數(shù) public Builder(int size) { this.size = size; } public Builder cheese(boolean value) { cheese = value; return this; } public Builder pepperoni(boolean value) { pepperoni = value; return this; } public Builder bacon(boolean value) { bacon = value; return this; } public Pizza build() { return new Pizza(this); } } private Pizza(Builder builder) { size = builder.size; cheese = builder.cheese; pepperoni = builder.pepperoni; bacon = builder.bacon; } }</span>

注意到現(xiàn)在Pizza是1個immutable class,所以它是線程安全的。又由于每個Builder's setter方法都返回1個Builder對象,所以可以串連起來調(diào)用。以下

Pizza pizza = new Pizza.Builder(12) .cheese(true) .pepperoni(true) .bacon(true) .build();

由上面我們可以知道,建造模式,給了用戶更大的自由,可以任選參數(shù).

2014⑴1-09 18:21:17

Brave,Happy,Thanksgiving !


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 欧美性video| 黄色免费av | 中文字幕日韩欧美一区二区三区 | 黄色三级免费 | 亚洲乱码国产乱码精品精98午夜 | 精品一区二区三区在线视频 | 91看片看淫黄大片 | 日本精品视频在线 | 国产一区二区三区在线观看免费 | 国产馆av| www国产亚洲精品 | 麻豆成人在线观看 | 黄色精品| 91麻豆精品国产91久久久久久久久 | 麻豆精品 | 在线免费观看黄色片 | 欧美不卡一区二区 | 国精品一区二区 | 国内久久精品 | 91精品国产91久久久久久 | 一区二区中文 | 99在线精品免费视频九九视 | 疯狂做受xxxx国产 | www312aⅴ欧美在线看 | 日本一区二区三区久久 | 国产在线观看av | 99久久综合国产精品二区国产 | a亚洲天堂| 久久欧美| 国产一级久久 | 成人免费视频播放器 | 国产精品久久久久久影院8一贰佰 | 成人精品毛片 | 亚洲福利一区二区三区 | 草色在线 | 国产精品久久av | 日本免费成人 | 国产精品一区一区三区 | 久久国产免费视频 | 欧美日韩电影一区 | 亚洲精品福利电影 |