Thinking in Java(6)-private constructors

来源:互联网 发布:java身份证号计算年龄 编辑:程序博客网 时间:2024/05/17 07:07

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.javaclass 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!
1 0
原创粉丝点击