学习到java一共有23种设计模式,设计模式是被大多数人知晓,反复使用,约定俗成的代码经验总结。每种设计模式都代表了在项目中会重复发生的问题,所以合理的运用设计模式可以完美的解决很多问题。
学习java的设计模式是很有必要的。虽然在面向对象还没学习到继承和接口,但是23中设计模式中的单例模式已经可以了解了。
单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。具体有两种表现形式:
package 面向对象;//单例设计模式第一种public class Singleton {public static void main(String[] args) { SingletonDemo a=SingletonDemo.getInstance(); } }class SingletonDemo {private static SingletonDemo a =null;private SingletonDemo(){}public static SingletonDemo getInstance() {if(a==null) { SingletonDemo a=new SingletonDemo(); }return a; } }
这种方式可以看出在调用方法时才创建新的对象,但是在多线程时容易产生问题,所以一般开发用的是下面的一种方式。
1 package 面向对象; 2 3 public class Singleton_2 4 { 5 public static void main(String[] args) 6 { 7 Singleton_2Demo a=Singleton_2Demo.getInstance(); 8 } 9 }10 11 class Singleton_2Demo12 {13 private Singleton_2Demo(){}14 private static Singleton_2Demo a=new Singleton_2Demo();15 public static Singleton_2Demo getInstance()16 {17 return a;18 }19 }
这种方式简单,不用考虑多线程的问题
通过这个设计模式对之前学习时写的面向对象的练习调整了一下,实现了单例的模式。
原代码:
package 面向对象; class Student { private String name;private int number;private String sex;private boolean learn;private String a; Student() { name="未知"; number=000; sex="未知"; learn=false; a="未知"; } public void setName(String name) { this.name=name; } public void setNumber(int number) { this.number=number; } public void setSex(String sex) { this.sex=sex; } public void setLearn(boolean learn) { this.learn=learn; } void scan() {if(this.learn==true) { a="在学习"; }else{ a="不在学习"; } System.out.print("姓名:"+this.name+" 学号:"+this.number+" 性别;"+this.sex+" 是否在学习:"+a); } } class Data { public static void main(String[] arg) { Student XiaoMin=new Student(); XiaoMin.setName("小明"); XiaoMin.setNumber(13023); XiaoMin.setSex("男"); XiaoMin.setLearn(true); XiaoMin.scan(); } }
单例模式:
package 面向对象;//实现单例设计模式 class Student_1 { private String name;private int number;private String sex;private boolean learn;private String a; private Student_1() { name="未知"; number=000; sex="未知"; learn=false; a="未知"; } private static Student_1 b=new Student_1(); public static Student_1 getInstance() { return b; } public void setName(String name) { this.name=name; } public void setNumber(int number) { this.number=number; } public void setSex(String sex) { this.sex=sex; } public void setLearn(boolean learn) { this.learn=learn; } void scan() {if(this.learn==true) { a="在学习"; }else{ a="不在学习"; } System.out.print("姓名:"+this.name+" 学号:"+this.number+" 性别;"+this.sex+" 是否在学习:"+a); } } class Data_2 { public static void main(String[] arg) { Student_1 XiaoMin=Student_1.getInstance(); XiaoMin.setName("小王"); XiaoMin.setNumber(13023); XiaoMin.setSex("男"); XiaoMin.setLearn(true); XiaoMin.scan(); } }
Atas ialah kandungan terperinci java设计模式中单例模式讲解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!