-
-
Notifications
You must be signed in to change notification settings - Fork 26.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: Add Bill Pugh Impl & Test (#2538)
* Add Bill Pugh Impl & Test Add Bill Pugh Impl & Test * Fix formatting * Fix checkstyle error * Reformat file * Reformat file * Fix indentation * Fix comment indent
- Loading branch information
1 parent
8b11e76
commit 1894fcf
Showing
8 changed files
with
140 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
73 changes: 73 additions & 0 deletions
73
singleton/src/main/java/com/iluwatar/singleton/BillPughImplementation.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
/* | ||
* This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under LGPL (see lgpl-3.0.txt). | ||
* | ||
* The MIT License | ||
* Copyright © 2014-2022 Ilkka Seppälä | ||
* | ||
* Permission is hereby granted, free of charge, to any person obtaining a copy | ||
* of this software and associated documentation files (the "Software"), to deal | ||
* in the Software without restriction, including without limitation the rights | ||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
* copies of the Software, and to permit persons to whom the Software is | ||
* furnished to do so, subject to the following conditions: | ||
* | ||
* The above copyright notice and this permission notice shall be included in | ||
* all copies or substantial portions of the Software. | ||
* | ||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
* THE SOFTWARE. | ||
*/ | ||
package com.iluwatar.singleton; | ||
|
||
/** | ||
* <p>Bill Pugh Singleton Implementation.</p> | ||
* | ||
* <p>This implementation of the singleton design pattern takes advantage of the | ||
* Java memory model's guarantees about class initialization. Each class is | ||
* initialized only once, when it is first used. If the class hasn't been used | ||
* yet, it won't be loaded into memory, and no memory will be allocated for | ||
* a static instance. This makes the singleton instance lazy-loaded and thread-safe.</p> | ||
* | ||
* @author [email protected] | ||
*/ | ||
public final class BillPughImplementation { | ||
|
||
/** | ||
* Private constructor to prevent instantiation from outside the class. | ||
*/ | ||
private BillPughImplementation() { | ||
// private constructor | ||
} | ||
|
||
/** | ||
* The InstanceHolder is a static inner class and it holds the Singleton instance. | ||
* It is not loaded into memory until the getInstance() method is called. | ||
*/ | ||
private static class InstanceHolder { | ||
/** | ||
* Singleton instance of the class. | ||
*/ | ||
private static BillPughImplementation instance = new BillPughImplementation(); | ||
} | ||
|
||
/** | ||
* Public accessor for the singleton instance. | ||
* | ||
* <p> | ||
* When this method is called, the InstanceHolder is loaded into memory | ||
* and creates the Singleton instance. This method provides a global access point | ||
* for the singleton instance. | ||
* </p> | ||
* | ||
* @return an instance of the class. | ||
*/ | ||
// global access point | ||
public static BillPughImplementation getInstance() { | ||
return InstanceHolder.instance; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -34,7 +34,9 @@ | |
* @author [email protected] | ||
*/ | ||
public final class ThreadSafeDoubleCheckLocking { | ||
|
||
/** | ||
* Singleton instance of the class, declared as volatile to ensure atomic access by multiple threads. | ||
*/ | ||
private static volatile ThreadSafeDoubleCheckLocking instance; | ||
|
||
/** | ||
|
@@ -73,7 +75,8 @@ public static ThreadSafeDoubleCheckLocking getInstance() { | |
// The instance is still not initialized so we can safely | ||
// (no other thread can enter this zone) | ||
// create an instance and make it our singleton instance. | ||
instance = result = new ThreadSafeDoubleCheckLocking(); | ||
result = new ThreadSafeDoubleCheckLocking(); | ||
instance = result; | ||
} | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
25 changes: 25 additions & 0 deletions
25
singleton/src/main/java/com/iluwatar/singleton/package-info.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
/* | ||
* This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under LGPL (see lgpl-3.0.txt). | ||
* | ||
* The MIT License | ||
* Copyright © 2014-2022 Ilkka Seppälä | ||
* | ||
* Permission is hereby granted, free of charge, to any person obtaining a copy | ||
* of this software and associated documentation files (the "Software"), to deal | ||
* in the Software without restriction, including without limitation the rights | ||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
* copies of the Software, and to permit persons to whom the Software is | ||
* furnished to do so, subject to the following conditions: | ||
* | ||
* The above copyright notice and this permission notice shall be included in | ||
* all copies or substantial portions of the Software. | ||
* | ||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
* THE SOFTWARE. | ||
*/ | ||
package com.iluwatar.singleton; |
16 changes: 16 additions & 0 deletions
16
singleton/src/test/java/com/iluwatar/singleton/BillPughImplementationTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package com.iluwatar.singleton; | ||
|
||
/** | ||
* Date: 06/18/23 - 16:29 PM. | ||
* | ||
* @author Owen Leung | ||
*/ | ||
public class BillPughImplementationTest | ||
extends SingletonTest<BillPughImplementation>{ | ||
/** | ||
* Create a new singleton test instance using the given 'getInstance' method. | ||
*/ | ||
public BillPughImplementationTest() { | ||
super(BillPughImplementation::getInstance); | ||
} | ||
} |