每日接触概念不清知识点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,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。