Java中的程序设计模式--单例与多例
生活随笔
收集整理的這篇文章主要介紹了
Java中的程序设计模式--单例与多例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
單例設計模式:
?????? 就是指一個類只允許產生一個實例化對象。
分析:
????????要想只能產生一個實例化對象,就意味著使用者不能在外部使用 new 生成一個實例,即表示該類的構造函數是私有的(貌似C++當中沒有私有的構造函數),私有的構造函數只能在類內部執行才能實例化一個對象,意味著類內部一定會有一個靜態的方法,來實例化一個自己的實例。
????????兩者的共同特點是:構造方法私有化,外部無法產生新的實例化對象,只能通過static方法取得實例化對象。
餓漢式單例設計模式:
class Message{private String note;private static final Message MESSAGE= new Message(); //靜態的代碼語句在類的內部實現一個實例化private Message(){} // 私有的構造函數public String getNote() { return note; }public void setNote(String note) { this.note = note; }public static Message getMessage(){return MESSAGE;} }public class Main {public staticvoid main(String[] args) {Message s = null;s = Message.getMessage();System.out.println(s);} }特點:
????在類加載的時候在內部實例化一個自己的對象。
懶漢式單例設計模式:
class Message{private String note;private static Message message;private Message(){} // 私有的構造函數public String getNote() { return note; }public void setNote(String note) { this.note = note; }public static Message getMessage(){if (message == null){?? // 表示第一次使用message = new Message();}return message;} }public class Main {public staticvoid main(String[] args) {Message s = null;s = Message.getMessage();System.out.println(s);} }特點:
?????? 只有在第一次使用的時候才會為其實例化一個實例的操作。
多例設計模式:
????????類的實例化對象被限制為固定的幾個。與多例設計模式大致相同,都是構造方法私有化,通過靜態的方法獲得對象。(該概念已經被枚舉所取代了)
樣例一:
class Sex{public staticfinal int MALE_CMD = 1;public static final int FEMALE_CMD = 2;private static final Sex MALE = new Sex("男");private static final Sex FEMALE = new Sex("女");private String sex;private Sex(String _sex){?? // 構造方法私有化this.sex = _sex;}public static Sex getSex(int ch){switch (ch){case MALE_CMD:return MALE;case FEMALE_CMD:return FEMALE;default:return null;}}@Overridepublic String toString(){return this.sex;} }public class Main {public staticvoid main(String[] args) {Sex a = Sex.getSex(Sex.MALE_CMD);System.out.println(a.toString());} }樣例二:
class Admin{private static final? Integer MAX_ADMIN_COUNT = 3;? // 管理員最多只能有三個private static Integer ADMIN_COUNT = 0; // 當前已有管理員個數private String name;private Integer age;public static Admin getAdmin(){if (ADMIN_COUNT < MAX_ADMIN_COUNT){ADMIN_COUNT++;return new Admin();}else {return null;}}public Integer getAge() { return age; }public void setAge(Integer age) {this.age = age;}public String getName() { return name;}public void setName(String name) { this.name = name; } }public class Main {public staticvoid main(String[] args) {Admin admin_1 = Admin.getAdmin();System.out.println(admin_1);Admin admin_2 = Admin.getAdmin();System.out.println(admin_2);Admin admin_3 = Admin.getAdmin();System.out.println(admin_3);Admin admin_4 = Admin.getAdmin();System.out.println(admin_4);??????? // null} }程序輸出結果為:
總結
以上是生活随笔為你收集整理的Java中的程序设计模式--单例与多例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA 引用传递案例分析
- 下一篇: JAVA中的异常使用