1. 程式人生 > >6/27 避免建立非法物件

6/27 避免建立非法物件

public class BuyerHelper
{
    private static final UserRepository userRepository;

    public static void createAndCheckBuyer(Cart cart)
    {
        int userId = cart.getUserId();
        User user = userRepository.getUserById(userId);

        Buyer buyer = BuyFactory.createFrom(user);
        BaseCheckResult checkResult 
= BuyerChecker.checkBuyerPermission(buyer); if (checkResult.isSuccess()) cart.setBuyer(buyer); else throw new InvaildBuyerException(); } }

很簡單的一段程式碼,存在以下問題:

1. 責任不清晰。

該方法既包含了驗證使用者是否是一個合法買家的功能,又實現了根據使用者建立買家的功能,並且還隱藏了一個很危險的功能,它還負責將這個建立好的買家設定到cart的屬性。而cart是一個外來引數,這意味著後續的程式碼中很有可能會依賴這個被附加到cart上的buyer屬性上,而這一點其實是比較隱晦的。

2. 建立非法物件。

本方法實現的功能應該是判斷一個使用者是否是一個有效的買家,理論上來說如果一個使用者不是有效買家的話,就不應該出現一個買家物件。但是,在這段程式碼中,確實先不管三七二十一先把Buyer物件創建出來,然後再對它進行驗證。我們應該盡力避免建立非法物件。

相關推薦

6/27 避免建立非法物件

public class BuyerHelper { private static final UserRepository userRepository; public static void createAndCheckBuyer(Cart cart) {

Effective Java 第三版讀書筆記——條款6避免建立不必要的物件

通常來講,重用一個物件比建立一個功能相同的物件更加合適。重用速度更快,並且更接近現代的程式碼風格。如果物件是不可變的(條款 17),它總是可以被重用。 考慮一個極端的例子: String s = new String("bikini"); // DON'T DO THIS! 這

享元模式——物件共享,避免建立物件

1. 享元模式介紹         享元模式是物件池的一種實現,它的英文名稱叫做Flyweight,代表輕量級的意思。享元模式用來儘可能減少記憶體使用量,他適合用於可能存在大量重複物件的場景

第5條:避免建立不必要的物件

一、一般來說,最好能重用物件而不是在每次需要的時候就建立一個相同功能的新物件。 String s = new String("stringette");//DON'T DO THIS //改進後的版

讀書筆記-《Effective Java》第5條:避免建立不必要的物件

 1. 這種寫法每次執行都會建立一個物件(存放於堆)。 String str1 = new String("ttt"); 改進後(存放於方法區常量池),當常量池已存在,則不會重複建立。 String str2 = "ttt"; 2. 應優先使用基本資料型別(int、long

如何在Android中避免建立不必要的物件

在程式設計開發中,記憶體的佔用是我們經常要面對的現實,通常的記憶體調優的方向就是儘量減少記憶體的佔用。這其中避免建立不必要的物件是一項重要的方面。 Android裝置不像PC那樣有著足夠大的記憶體,而且單個App佔用的記憶體實際上是比較小的。所以避免建立

05、避免建立不必要的物件

1. 最好能重用物件而不是在每次需要的時候就建立一個相同功能的新物件 2. 對於同時提供了靜態工廠方法和構造器的不可變類,通常可以使用靜態工廠方法而不是構造器,以避免建立不必要的物件。例如:Boolean.valueOf(String)幾乎走勢優先於構造器Boolean(S

Effective Java 第五條:避免建立不必要的物件

反例: public class Person { private final Date birthDate; public Person(Date birthDate) { this.birthDate = birthDate;

effictive--避免建立不必要的物件

demo01: package com.xiaohao.effective; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; /** * 避免建立不必要的物件Ca

EffactiveJava-避免建立不必要的物件

類是Java程式的基本組成單元,在程式執行過程中要通過建立大量的物件來執行整個系統的執行,單有些物件唄建立的代價是高昂的,例如資料庫連線、Spring的ApplicationContext等,這類物件往往用單例強化成全域性唯一,另外一些物件相對來說建立代價會小很

高效Java05:避免建立不必要的物件

就像我們大部分人所知道的,最好能重用物件,而不是每次都重複建立一個功能相同的新物件,下面舉幾個例子說明這個點。 重用不可變物件 如果物件是不可變的,那麼它就始終可以被重用。對於同時提供了靜態工廠方法和構造方法的不可變類,通常使用靜態工廠方法而不是構造方法

Effective Java之避免建立不必要的物件(五)

1.對於不可變類(immutable),他始終可以被重用。 如:String類 String s = new String(“string”); 這種方法建立了兩個String物件,因為傳入String構造器的引數本身就是一個String例項,new再建立

6-27

愛好 文化 藝術家 高素質 但是 意思 是個 同時 電視   感覺當小鮮肉是比當德藝雙馨的老藝術家是要更難的,真實原因是我認為門檻越低的競爭越激烈。 舉了個例子,表面上詩歌寫起來門檻比寫小說低,其實是因為詩歌的大發展的年代需要詩歌這種形式,通常是大家讀不起書,聽不到收音機,

2017.6.27 跟開濤學spring3--spring概述

自己 .html href log 第三方 ring col nbsp struts 參考來自:http://www.importnew.com/17474.html 註意,項目中使用的是spring4,這裏學習的是spring3。關於spring4的變化:http://

RedHat 6.5中建立RAID5(軟件磁盤陣列 )

RedHat 6.5;建立RAID raid5 RAID磁盤陣列的英文名稱是Redundant Array of Independent Disks (RAID),即獨立冗余磁盤陣列。RAID可以通過一些技術(軟件或硬件)將多個硬盤整合成為一個較大的磁盤設備;而這個較大的磁盤可不止存儲功能而已,它還具

Confluence 6 配置避免管理員聯系表單垃圾

Confluence你可以配置 Confluence 使用驗證碼(Captcha)來避免垃圾內容發送給 Confluence 管理員。有關管理員聯系表單驗證碼的內容在全站驗證碼設置中進行配置,相關的文檔請參考 Configuring Captcha for Spam Prevention 頁面中的內容。 ht

RedHat 6.5中建立Raid5卷(軟件磁盤陣列) ;並且對Raid5卷做磁盤配額

數據備份 不能 設置 blog 安裝 創建raid 接下來 簡單 需要 實驗項目: 1 了解並且配置磁盤陣列(raid 0、raid1 、raid5 、raid6 、raid1+0) 2 了解並且配置磁盤配額 (為了解決安全性,對磁盤進行限制) 磁盤陣列理論部

2018-6-27

localhost 日誌 eba title src names DG connect 技術分享 16.4 配置Tomcat監聽80端口16.5/16.6/16.7 配置Tomcat虛擬主機16.8 Tomcat日誌16.4 配置Tomcat監聽80端口即變更監聽端口vim

6.27 7.6-7.9

ever sources 識別 left file bsp track ren 清理 7.6 yum更換國內源 默認.repo文件中的源為國外的網址,下載速度較慢,可以更換國內源步驟:1 刪除原來的.repo文件2 下載國內源的.repo文件到yum.repos.d目錄下[

6.27筆記(docker)

dna nat tag 物理機 emctl conf overruns IE 訪問 1 docker01docker 安裝 停止禁用防火墻systemctl stop firewalldsystemctl mask firewalld 禁用 selinux 配置 yum 源