每日接触概念不清知识点2018.8.13

每日接触概念不清知识点2018.8.13

面向对象的四大特性

1)封装:

面向对象的语言中的封装是以类来体现的,在一个类中包含属性和方法,封装有利于项目的模块化,达到高内聚低耦合的目的。

2)抽象:

在面向对象的语言中抽象是以抽象类来体现的,由于抽象类不是一个具体的对象,所以不能直接被实例化,抽象有利于项目的维护和扩展。

3)继承:

在面向对象的语言中,继承就类似于父子关系,儿子可以继承父亲的一些优秀的特性,继承可以实现程序的重用和复用。

4)多态:

        不同子类的对象赋值给父类的引用表现出来的行为是不一样的,多态可以达到类的多重继承。

 

命令模式

命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传递给调用对象。调用对象寻找可以处理该命令的合适对象,并把该命令传给相应的对象,该对象执行命令。

单例模式(饿汉、懒汉)

确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

/**

 * 饿汉式实现单例模式

 */

public class Singleton {

    private static Singleton instance = new Singleton();

 

    private Singleton() {

    }

 

    public static Singleton getInstance() {

        return instance;

    }

}

  饿汉式顾名思义,就是这个汉子很饿,一上来就把单例对象创建出来了,要用的时候直接返回即可,这种是单例模式中最简单的一种实现方式。但是问题也比较明显。单例在还没有使用到的时候,初始化就已经完成了。如果程序从头到位都没用使用这个单例的话,单例的对象还是会创建,这就造成了不必要的资源浪费。

/**
 * 懒汉式实现单例模式
 */
public class Singleton {
    private static Singleton instance;
 
    private Singleton() {
    }
 
    // synchronized方法,多线程情况下保证单例对象唯一
    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

}

  饿汉式也顾名思义,就是这个汉子比较懒,一开始的时候什么也不做,知道要使用的时候采取创建实例的对象。getInstance()方法中添加了synchronized关键字,使其变成一个同步方法,目的是为了在多线程环境下保证单例对象唯一。 
  优点: 只有在使用时才会实例化单例,一定程度上节约了资源。 
  缺点: 第一次加载时要立即实例化,反应稍慢。每次调用getInstance()方法都会进行同步,这样会消耗不必要的资源。这种模式一般不建议使用。

 

工厂模式

#include <iostream>

using namespace std;

class Base

{

public:

            virtual void show(void) = 0;

};

class A : public Base

{

public:

            void show(void)

            {

                       cout << "-----我是类A-----" << endl;

            }

};

class B : public Base

{

public:

            void show(void)

            {

                       cout << "-----我是类B-----" << endl;

            }

};

class C : public Base

{

public:

            void show(void)

            {

                       cout << "-----我是类C-----" << endl;

            }

};

class D : public Base

{

public:

            void show(void)

            {

                       cout << "-----我是类D-----" << endl;

            }

};

enum CLASS_TYPE {TYPE_A=1,TYPE_B,TYPE_C,TYPE_D};

Base* create_class(CLASS_TYPE type)

{

            switch(type)

            {

                       case TYPE_A: return new A;

                       case TYPE_B: return new B;

                       case TYPE_C: return new C;

                       case TYPE_D: return new D;

            }

}

int main()

{

            Base* b1 = create_class(TYPE_A);

            b1->show();

            Base* b2 = create_class(TYPE_B);

            b2->show();

            Base* b3 = create_class(TYPE_C);

            b3->show();

            Base* b4 = create_class(TYPE_D);

            b4->show();

}

 

内存泄漏

内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。

内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。

原文地址:https://www.cnblogs.com/gzk1171848896/p/9470269.html