GoF design patterns are also hidden in the Java libraries that you use most often. It's easy to overlook the busy daily work, but once in a while, let's take a closer look at the beautiful design, which can be said to be a kind of art.
import java.util.Locale;
import java.util.Locale.Builder;
...
Locale locale = new Builder()
.setLanguage("ja")
.setRegion("JP")
.setScript("Latn")
.setExtension(Locale.UNICODE_LOCALE_EXTENSION, "ca-japanese")
.build();
It is a Java Locale class instance generation scene that is often used when outputting the date and time, but when you watch it again, you will be fascinated by the beauty of the interface.
Locale The Builder class is used to create the instance. Set various properties with the setXXX
method of this class, and then create an instance with the build
method. I feel the beauty of the Locale instance, which makes me feel that it is immutable. Details will be explained below.
In fact, the Locale class can also be instantiated directly with new. Rather, I usually write this way. I feel like this.
//The argument is language, country, variant
Locale locale = new Locale("ja", "JP", "JP");
So how do you add a new property to this Locale instance?
// XXX:There is no such method
locale.setScript("Latn");
You might come up with a way to set it with an instance method like this, but there is no such method. This is because the Locale class has an immutable design in which the contents cannot be changed once the instance is created. You can use the instance with confidence because the value will not be inadvertently changed elsewhere.
In that case, one way is to use a constructor with more arguments.
// XXX:No constructor takes 4 arguments
Locale locale = new Locale("ja", "JP", "JP", "Latn");
However, there is no such constructor. This method requires as many constructor types as there are properties, which makes the implementation unattractive to generate a class with a large number of properties.
By using the Builder pattern as in the code at the beginning, you can benefit from the following:
Also,
build
methodThat is also a feature of the Builder pattern. However, the argument verification can also be done in the constructor when directly newing, so it is irrelevant in this comparison.
Many experts have also praised the Builder pattern.
irxground
To create a complex object, it is useful to have a class dedicated to creation. http://qiita.com/irxground/items/d1f9cc447bafa8db2388
lang_and_engine
It is a pattern to make one shot with Dokan at the end after placing an order. A pattern in which settings and instructions can be passed one by one in advance to customize the final processing. It can be said that. You can say it one by one, so you don't have to stuff everything into the initialization process in the constructor. http://language-and-engineering.hatenablog.jp/entry/20120330/p1
It's the real pleasure of programmers to be able to enjoy intellectual enjoyment just by looking at a single line of code without having to go to the museum.
If you are an engineer who sympathizes with the artistry of the Builder pattern, please contact our recruiting staff (Qualysite Technologies Inc.). !!
-Design pattern to enjoy with Java library used frequently --Factory pattern --Design patterns to enjoy with frequently used Java libraries --Builder patterns -Design patterns to enjoy with frequently used Java libraries --Abstract Factory pattern
-Design patterns to enjoy with Java libraries that are often used --Facade patterns -Design pattern to enjoy with frequently used Java library --Adapter pattern
-Design patterns to enjoy with frequently used Java libraries --Template Method patterns -Design patterns to enjoy with frequently used Java libraries --Strategy patterns
Recommended Posts