设计模式:懒汉模式,饿汉模式
单列设计模式:保证了一个类在内存中只能有有一个对象,比如多线程访问一个配置文件。希望多程序
都是操作的是同一个配置文件的数据。那么就需要保证该文件对象的唯一性。
思路:1.怎么做才能保证这个对象是唯一的?其他程序通过new创建该类对象是根本无法控制个数,那么,
就不让其他程序创建该类的对象了。因为不可以控制,2.不让其他程序创建,就让在本类中自己创建一个对象。
3.该类将创建的对象对外提供,让其他程序获取并使用。
步骤:1.怎么实现不让其他程序创建该类对象呢?将该类的构造函数私有化。
比如:class Single
{
private Single(){}; //这里我们就是私有化构造方法
}
2.在本类中创建一个本类的对象
class Single
{
private Single(){};
private Single s=new Single();
}
3.定义一个方法,返回值是本类类型。让他其他程序通过该方法就可以获得该类对象。但是这个方法一定是public的
//这个是饿汉式的。开发的时候我们一般会设计到多线程的问题式,懒汉是会导致一系列的安全隐患。但是懒汉
//是单例模式中的重要考察点
//饿汉单列模式
class Single
{
private static Single(){};
private static final Single s=new Single();
public static Single getInstance(){
return s;
}
}
//接下来我们就是懒汉模式了 (这里是不加锁的)
class Single1
{
private static Single1(){};
private static Single1 s=null;
public static Single1 getInstance(){
if(s=null)
s=new Single1();
return s;
}
}
class Single1
{
private static Single1(){};
private static Single1 s=null;
public static Single1 getInstance(){
if(s==null){
synchromized(Single1.class){
if(s==null){
s=new Single1();
}
}
}
}
return s;
}
}
这里我们讲解一下这里的思路就是:
饿汉就是:我非常饿。在类创建的同时就实例话一个静态对象出来,不管之后会不会用这个单列,都会占据一定的内存。
造成内存泄漏,但相应的,在第一次调用是速度也会很快。
懒汉就是:我非常懒。你在使用我的时候,我才会创建你,不然的话,我都是不刁你。第一次调用是要做初始化,如果要做的工作比较繁忙,
性能上会有延迟。之后就和饿汉一样了。
工厂模式:
简单工厂:就是静态工厂,工厂类中,有一个Factory,根据条件决定一个接口由哪个具体产品类来实现。
工厂方法:创建多个工厂类。各个工厂类中,都对应一个获得接口A实例的方法。用户决定使用哪个工厂。
抽象工厂:对工厂方法进行扩展。各个工厂类中,再增加一个获得接口B实例的方法。
提一下,多个工厂类都继承自同一个接口。
装饰着模式:装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
这是装饰模式的一个典型应用, 使用DataOutputStream封装了一个FileOutputStream, 以方便进行输出流处理
OutputStream out = new DataOutputStream( new FileOutputStream( "test.txt") )
职责链模式(Chain of Responsibility):使多个对象都有机会处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。