设计模式

java中共有23种设计模式:前人不断改善某以功能代码,最后形成了一种最简单,最通用的编写方式,人们把这种定义模式叫做设计模式



多态存在的问题:虽然当想访问对象的时候不用更改方法,直接改实例就可以,但是如果创建实例太多的时候,也会变得麻烦起来

简单静态工厂模式

使用工厂类创建对象,之后通过调用工厂方法进行创建对象

优点:1.提高安全性

          2.便于程序扩展

          3.提高工作性能

1.在工厂类中写一个静态获取对象的方法

public class Factory {   

public static Person getP(){

return new Student() ;

}

}

2.调用方法的时候通过调用工厂类的静态方法获取对象,这样更改获取对象的时候,只改工厂类的静态方法就可以



单例模式:单实例,一个类只能创建一个对象


饿汉式(很饿,一开始就要创建)

1,创建私有的静态的本类对象变量。               

2,私有构造方法

3,对外提供一个静态方法,用来获取该对象

private static Student s=new Student();

private Student(){}

public static Student getS(){

return s;

}


懒汉式(很懒用的时候再创建)

1,创建私有的静态本类变量(不引用对象)

2.私有构造方法

3.对外提供一个静态方法,用来获取该对象,如果本类引用的为空创建一个对象,如果不为空返回该对象

private Teacher t;

private Teacher(){}

public Teacher getT(){

if(t==null){

t=new Teacher();

}

return t;

}

单例模式顾名思义就是为了只创建一个对象,在不考虑多线程的时候我们通过一个if就可以解决这个问题了,但是如果有多个线程创建对象的话,可能会同时进入方法,在第一个线程没有创建完对象的时候,第二个线程完成了是否有对象的判断,这样第二个线程也会发现没有对象,也会去创建对象,这样就会创建两个对象了,由此我们使用同步代码块,解决了在第一个线程没有创建对象完毕,第二个线程是不会去判断是否有对象的。当使用同步代码块后,第一个线程进入之后发现没有对象,就创建了一个,之后的所有线程都要排着队去判断是否已经存在对象了,这样是十分慢的,我们想要在第一个线程创建完对象之后,之后所有的线程可以一起去判断有没有对象,我们就引入了第二个if用来避开同步代码块。

        如果没有第二个if  经过第一个if的判断两个线程发现都没有对象,所以都进入了到if里了,之后第一个线程创建了一个对象之后,由于内部并没有判断,第二个线程又创建一个对象。而如果有了内部的if判断的话,第一个线程进入后判断对象为空创建对象,这时候有了对象了,第二个线程进入后发现有对象了了,就会直接return已经创建的对象,没有第二个if同步代码块内只有一条语句,失去了同步的意义,相当于没有同步代码块。没对象需要同步访问,有对象可以异步访问速度快


设计模式_第1张图片

第二个if解决的是在没有对象的时候,当很多线程都到达了方法前准备访问方法的时候,所有线程会排队访问,在这时只有第一个线程会创建对象,保证了多线程下的对象的唯一性;第一个if是为了解决当有了一个对象之后,将新来的线程拦截在外边,防止多线程访问同步代码块,出现多线程排队去判断是否已经存在对象的问题

第一个if解决效率,第二个if解决同步问题。(同步代码效率低)

设计模式_第2张图片

在实际开发过程中一般使用饿汉,懒汉虽然节约内存,每次使用都要创建对象,消耗时间

你可能感兴趣的:(设计模式)