单例:就是一种规范而已,不是必须的知识点或者关键字,仅仅是一种比较好的习惯(用途比较广泛)。
作用:1、将规范好的数据传到已经开辟好的内存里,只能存一个,如果再往里面存就会把上一个数据替代。—传值
2、全局访问点–感觉就是将一个空间给他static了一样(不准确)。
一般分两类:饿汉式、懒汉式(还有几种,我还不会)
普通方法:
总结:就是比普通方法多了三句话
//**普通方法**
public class DanLi {
public static void main(String[] args) {
Content cont1 = new Content("马云","男","仲裁",168,50000);
cont1.Show();
}
}
class Content{
private String name;
private String sex;
private String works;
private int height;
private int wage;
public void Show(){
System.out.println("大家好,这位是"+this.name+",是我们公司的"+
this.works+",可以看出"+this.sex+"身高:"+this.height+
"\n薪资在"+this.wage);
}
public Content(String name,String sex,String works,int height,int wage){
this.wage=wage;
this.height=height;
this.sex=sex;
this.works=works;
this.name=name;
}
}
//**变成单例模式**
public class demo5 {
public static void main(String[] args) {
Content.getInstance().Show();
}
}
class Content{
private static Content content=new Content("马云","男","仲裁",168,50000);
public static Content getInstance(){
return content;
}
private String name;
private String sex;
private String works;
private int height;
private int wage;
public void Show(){
System.out.println("大家好,这位是"+this.name+",是我们公司的"+
this.works+",可以看出"+this.sex+"身高:"+this.height+
"\n薪资在"+this.wage);
}
public Content(String name,String sex,String works,int height,int wage){
this.wage=wage;
this.height=height;
this.sex=sex;
this.works=works;
this.name=name;
}
}
**
不建议写成这个模式的单例,虽然按照格式他叫单例,
但是他变成了马云的单例,而不是所有人的
应该将单例写成一个类
**
实际代码
public class DanLi {
public static void main(String[] args) {
Content cont1 = new Content("马云","男","仲裁",168,50000);
Content cont2 = new Content("马云1","男","仲裁",168,50000);
Instance.getInstance().setContent(cont1);
Instance.getContent().Show();
//写成Instance.Show();也行
System.out.println(Instance.getInstance());
Instance.getInstance().setContent(cont2);
Instance.getContent().Show();
System.out.println(Instance.getInstance());
// System.out.println((Instance.getInstance().setContent(cont1))==(Instance.getInstance().setContent(cont2)));
}
}
class Instance {
//饿汉式
// private static Instance instance = new Instance();
// public static Instance getInstance() {
// return instance;
// }
//懒汉式
private static Instance instance = null;
public static Instance getInstance() {
if (instance == null) {
instance = new Instance();
}
return instance;
}
private Instance() {
}
private static Content content;
public static void setContent(Content content) {
Instance.content = content;
}
public static Content getContent() {
return content;
}
}
class Content{
private String name;
private String sex;
private String works;
private int height;
private int wage;
public void Show(){
System.out.println("大家好,这位是"+this.name+",是我们公司的"+
this.works+",可以看出"+this.sex+"身高:"+this.height+
"\n薪资在"+this.wage);
}
public Content(String name,String sex,String works,int height,int wage){
this.wage=wage;
this.height=height;
this.sex=sex;
this.works=works;
this.name=name;
}
public void setName(String name){
this.name=name;
}public void setHeight(int height){
this.height=height;
}public void setSex(String sex){
this.sex=sex;
}public void setWorks(String works){
this.works=works;
}public void setWage(int wage){
this.wage=wage;
}
public String getName(){
return this.name;
}public String getSex(){
return this.sex;
}public String getWorks(){
return this.works;
}public int getHeight(){
return this.height;
}public int getWage(){
return this.wage;
}
}
private static Instance instance = null;
static用来将singleInstance变成全局存在
final用来固定变量singleInstance,不让他的值发生变化
private用来不被外面的人看见
private SingleInstance(){}
对构造方法的私有化
就是为了不被外面的人可以用到
防止被main函数多次调用创建多个函数