设计模式:懒汉模式,饿汉模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZSS1753936255/article/details/82845179

设计模式:懒汉模式,饿汉模式

单列设计模式:保证了一个类在内存中只能有有一个对象,比如多线程访问一个配置文件。希望多程序
都是操作的是同一个配置文件的数据。那么就需要保证该文件对象的唯一性。

思路: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):使多个对象都有机会处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

猜你喜欢

转载自blog.csdn.net/ZSS1753936255/article/details/82845179
今日推荐