JavaでのgetInstanceメソッドの説明

1667 ワード

1.抽象クラスで
      抽象クラスは直接newできないので、インスタンス化するにはgetInstance()メソッドしか使えません.コードは以下の通りです.
package test;

abstract class Person
{
	private String title;
	public Person(String title)
	{
		this.title = title;
	}
	abstract public void eat();
	public static  PersonImpl getInstance(String title)
	{
		return new PersonImpl(title);
	}
	//    static       :
	//No enclosing instance of type Person is accessible. Must qualify the allocation with an enclosing instance of type Person (e.g. x.new A() where x is an instance of Person).
	static class PersonImpl extends Person     
	{
		public PersonImpl(String title) {
			super(title);
			// TODO Auto-generated constructor stub
		}

		@Override
		public void eat()
		{
			System.out.println("Eat!!!");
		}
		
	}
}

public class TestDemo
{
	public static void main(String args[]) 
	{
		Person p = Person.getInstance("Limbo");
		p.eat();
	}
}

2.単例設計モード
       プログラムにクラスのインスタンス化が1回しか現れないことを望む場合は、getInstance()メソッドも必要です.コードは次のとおりです.
package test;

class Singleton
{
	private String title;
	private String content;
	private static Singleton SINGLETON = null;  
	private Singleton(String title,String content)
	{
		this.title = title;
		this.content = content;
	}
	public static Singleton getInstance()
	{
		if(SINGLETON == null)
			SINGLETON = new Singleton("Kobe", "MVP");
		return SINGLETON;
	}
	public String toString()
	{
		return this.title + " - " + this.content;
	}
}
public class TestDemo
{
	public static void main(String args[]) 
	{
		Singleton s = Singleton.getInstance();
		System.out.println(s);
	}
}