If you don’t want anyone else to hava access to your class,you can make all the constructors private,thereby preventing anyone but you,inside a static member of the class,from creating an object of that class.
//Lunch.java
class Soup1{
private Soup1() {};
public static Soup1 makeSoup(){
return new Soup1();
}
}
class Soup2{
private Soup2() {}
//Create a static object and return a reference upon request.((The "Singleton" pattern;
private static Soup2 ps1 = new Soup2();
public static Soup2 access() {
return ps1;
}
public void f() {}
}
public class Lunch {
void testPrivate() {
//Can't access,because of private constructor!
//Soup1 soup = new Soup1();
}
void testStatic() {
Soup1 soup = Soup1.makeSoup();
}
void testSingleton() {
Soup2.access().f();
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
}
}
一个小练习:
Following the form of the example Lunch.java, create a class called ConnectionManager that manages a fixed array of Connection objects. The client programmer must not be able to explicitly create Connection objects, but can only get them via a static method in ConnectionManager. When ConnectionManager runs out of objects, it returns a null reference. Test the classes in main().
my solution:
class ConnectionManager{
private ConnectionManager(){};
static int count = 3;
public static ConnectionManager connectClient()
{
if (count != 0)
{
count--;
System.out.println("Connected!");
return new ConnectionManager();
}
else
{
System.out.println("No more connection!");
count = 0;
return null;
}
}
}
public class Connection {
public static void main(String[] args) {
ConnectionManager client1 = ConnectionManager.connectClient();
ConnectionManager client2 = ConnectionManager.connectClient();
ConnectionManager client3 = ConnectionManager.connectClient();
ConnectionManager client4 = ConnectionManager.connectClient();
}
}
result:
Connected!
Connected!
Connected!
No more connection!