プログラム全体(さまざまなクラス)に表示されるオブジェクトを作成する必要があります。そのようなクラスのためにシングルトンを作成したくないのは、私はいくつかのインスタンスが必要な場合があるからです。だから私はコンテナとしてSingleton型のクラスを作成し、その中に私はプログラムのどの時点でも使用できるオブジェクトを作成しました。 以下は、何が起こっているかを見るサンプルコードです。 Container
のインスタンスを参照すると、私はそこで作成された施設に常にアクセスします。私は勉強するプログラムを作っています。大きなものになるだろうが、私は問題の解決策を持っているアイデアを思いついた。問題は、異なるコントローラーが明示的なオブジェクトを必要とすることです。そして、完全なオブジェクトに基づいて計算を実行します。オブジェクトのコンテナとしての型Singletonのクラス
public class Person {
String name;
String surname;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, String surname, int age) {
this.name = name;
this.surname = surname;
this.age = age;
}
public Person(){
}
}
。
public class Container {
private Person person1;
private Person person2;
private static Container singleton = new Container();
public Container() {
person1 = new Person();
person2 = new Person();
}
public Person getPerson1(){
return person1;
}
public Person getPerson2(){
return person2;
}
public static Container getInstance() {
return singleton;
}
}
。
public class Test {
public static void main(String[] args) {
Person person;
Container singleton = Container.getInstance();
person = singleton.getPerson1();
person.setName("John");
Person personTest1;
Container singleton2 = Container.getInstance();
personTest1 = singleton2.getPerson1();
System.out.println(personTest1.getName());
}
}
出力:
ジョン
それは最善の解決策ではないかもしれませんが、このような単純かつ迅速なソリューションとして見つかっていません。どう思いますか?
なぜ本当にコンテナが必要なのですか?デフォルトのPersonsを作成するということは、使用するビジネスロジックがないことを意味し、そうであれば工場設計パターンよりも優先されます。 – Rotem
IoC/DIフレームワークを使用しない場合、このソリューションは非常に妥当です。私は 'person1'と' person2'宣言に 'final'を加えて、再割り当てを制限します。 1. 'person1'と' person2'を 'static'フィールドとして宣言し、それらを静的ブロックまたは正しい場所に作成します。2.' getPerson'メソッドを 'static'として宣言します。3.この場合、コンテナインスタンスの作成などを削除できます。 –
コンテナクラスがシングルトンの場合は、プライベートコンストラクタが必要です。 –