设计模式-工厂模式
1 工厂模式
- 父类决定实例的生成方式,但并不决定所要生成具体的类,具体处理全部交给子类处理。 将生成实例的框架与具体的实例类解耦。
- 在软件系统中,经常面临创建对象的工作,由于需求的变化,需要创建的对象的具体类型经常变化
- 如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“具体对象创建工作”的紧耦合?
2 问题
1 | // FileSplitter.cpp |
1 | // MainForm.cpp |
1 | // FileSplitter.cpp |
1 | // MainForm.cpp |
1 | enum TaxBase { |
1 | // FileSplitter.cpp |
1 | // MainForm.cpp |
lock_guard:锁定互斥锁后,生命周期结束后会自动释放,不需要手动解锁,也无法手动解锁unique_lock:多数情况与上面一个可以相互替代,但是其更具功能性(付出一些代价)。unique_lock可以进行unlock操作,因此可以和条件变量搭配使用多个线程互斥输出: 0 1 2 3 4 5 6 ...
1 | #include <iostream> |
1 | typedef pair<int, int> node; |
1 | vector<vector<bool>> visited(row, vector<bool>(col, false)); |
i经常要往回走,无法利用已匹配信息,效率不够好1 | int bruteForce(const string& t, const string& p) { |
i指针不回溯,通过修改j指针,让模式串尽量移动到有效的位置”next数组: next[j] = d 表示当 t[i] != p[j] 时,j下一次匹配的位置。注意到,下标从0开始,d值实际上是下标j前的最长前后缀子串的长度next的过程本身就是p串与自己匹配的过程p[i]==p[j] ,则 p[++i] = ++jp[i]!=p[j] ,则利用前面已求得的next数组,j=next[j] ;直到无法找到,此时 j=-1 ,自动进入第一个if语句,此时i往后走一步,妙l指针的方式逐步处理1 | int core(string& s, int& l) { |