淮南做网站的,客户关系管理案例,cuntlove wordpress,有哪些网站平台设计模式
目的
实现可重用解决方案#xff0c;构筑易维护、可扩展的软件系统。
六大原则
单一职责#xff1a; 类的职责单一#xff0c;一个方法做一件事。
开闭原则#xff1a; 拓展开放#xff0c;修改关闭。
里氏替换#xff1a; 父类能出现的地方#xff0c;子…设计模式
目的
实现可重用解决方案构筑易维护、可扩展的软件系统。
六大原则
单一职责 类的职责单一一个方法做一件事。
开闭原则 拓展开放修改关闭。
里氏替换 父类能出现的地方子类可以替换。子类必须全部实现父类方法尽量不暴露自己public方法供外界使用。覆盖或实现父类方法时输入参数可以多。
依赖倒置 模块之间的依赖通过抽象发生具体类之间不依赖。每个类尽量有抽象类任何类不应该从具体类派生尽量不重写基类方法。
迪米特法则 尽量减少对象间交互从而减少类间耦合。
接口隔离原则 类间的依赖关系建立在最小的接口上。
抽象构建框架实现拓展细节。
单例模式
一个类只有一个对象及系统中只有一个实例实例被所有程序模块共享。
例如服务器配置信息放在一个文件中配置数据由单例对象统一读取服务进程的其他对象通过单例对象获取配置信息。
实现
有饿汉模式和懒汉模式两种实现模式。
饿汉模式
程序启动就创建唯一实例对象。
多线程获取单例对象不需要加锁。
#include iostream
#include stringclass Singleton {
private:// 私有构造函数防止外部创建实例Singleton() : data(Singleton) {std::cout Singleton instance created! std::endl;}// 私有析构函数防止外部删除实例~Singleton() {}// 删除拷贝构造函数和赋值运算符Singleton(const Singleton) delete;Singleton operator(const Singleton) delete;// 静态成员变量类加载时初始化static Singleton instance;// 成员变量std::string data;public:// 获取单例对象的静态方法static Singleton getInstance() {return instance;}// 获取成员变量的方法std::string getData() {return data;}
};// 在类外初始化静态成员变量
Singleton Singleton::instance;int main() {// 获取单例对象Singleton singleton Singleton::getInstance();// 访问单例对象的成员变量std::cout Data: singleton.getData() std::endl;// 再次获取单例对象验证是否为同一个实例Singleton singleton2 Singleton::getInstance();if (singleton singleton2) {std::cout Both references point to the same instance! std::endl;}return 0;
}懒汉模式
如果单例对象构造特别耗时或者耗资加载插件、网络可在第一次使用时才创建对象。
C11 之后局部静态变量的初始化是线程安全的因此可以直接使用局部静态变量实现懒汉模式。
#include iostream
#include stringclass Singleton {
private:// 私有构造函数防止外部创建实例Singleton() : data(Singleton) {std::cout Singleton instance created! std::endl;}// 私有析构函数防止外部删除实例~Singleton() {}// 删除拷贝构造函数和赋值运算符Singleton(const Singleton) delete;Singleton operator(const Singleton) delete;// 成员变量std::string data;public:// 获取单例对象的静态方法static Singleton getInstance() {static Singleton instance; // 局部静态变量线程安全return instance;}// 获取成员变量的方法std::string getData() {return data;}
};int main() {// 获取单例对象Singleton singleton Singleton::getInstance();// 访问单例对象的成员变量std::cout Data: singleton.getData() std::endl;// 再次获取单例对象验证是否为同一个实例Singleton singleton2 Singleton::getInstance();if (singleton singleton2) {std::cout Both references point to the same instance! std::endl;}return 0;
}推荐一下
https://github.com/0voice