南宁定制网站建设,网站经典设计,自己做的网站根目录哪里找到,怎么知道网站程序是什么做的一、设计模式
Design patterns#xff0c;软件设计模式#xff0c;它是什么#xff1f;很多初学者会被这种高大上的东西给唬住。其实#xff0c;所有的书籍上都说得很清楚#xff0c;只是它们把这种说法说得很高大上而已。举个简单例子#xff0c;在抖音上经常可以看到介…一、设计模式
Design patterns软件设计模式它是什么很多初学者会被这种高大上的东西给唬住。其实所有的书籍上都说得很清楚只是它们把这种说法说得很高大上而已。举个简单例子在抖音上经常可以看到介绍对象问对方是干啥工作的对方说是什么精密仪器定位啥啥的等等其实就是一个修家电的。 设计模式其实也类似它其实不是什么高大上的技术它只是编码前辈们在编码的实践中发现有很多种情况下都可以用一类解决方法来解决问题。特别是当初软件的应用基本都很专业和定向不象现在如此普及所以解决起来也容易形成一些固定的形式。因此就总结出来了那些种设计模式。 给大家说一个农业的例子就明白了早年种小麦由于土地、肥料、亩产等原因种小麦需要什么“两密一稀、三密一稀四秘一稀”等等。这其实就类似于农业上的设计模式。明白了吧所以模式就是固定的模型的意思。它的意思就是有一般意义可简单重复。所以千万不要对设计模式有神秘感。
二、作用
现实世界和虚拟世界都是千变万化的但万变不离其宗大抵还是要遵循一定的规律的。这种规律在数学上可以是定理在物理上是定律。而在软件程序中如果解决某种逻辑使用的方法或手段一致则可以抽象成设计模式。 刚刚说过了设计模式的一个重要的特点就是可重复性也就是说这种编码的手段是脱离开语言本身的是一种解决问题的思路的实现。它是一种解决类似问题的方法或者思想的具体的指导落地形式。具有很强的理论和实践性或者说理论和实践的结合性。它既从实践中反复重复的问题中抽象出可重用的方法又可以用这种可具体实践的可重用的方法去解决实际问题。这话有点拗口但仔细一想就明白了。 举一个简单例子你有一个指定大小的扳手它既可以拧水管上的同样大小的螺丝也可以拧机器上的同样大小 的螺丝推广开来只要是相同大小的螺丝无论这个螺丝在哪儿都可以用它来拧。 那么既然设计模式这么好用它可以为编码者带来什么好处呢答案显而易见 1、不用动更多的脑子去解决相同的问题也不用考虑其中的一些细节问题。因为前辈们都已经给解决了。这就是最重要的简单性。 2、既然是总结出来的模式那么其中的绝大多数坑甚至全部坑都已填好因此代码质量得到提高进而提高了系统的稳定必性。 3、可重用的手段甚至是代码提高了代码的利用率和开发的效率。这个就不用多言了吧。 说得再通俗一些就是想得少干得多效率高质量好。哪个不高兴不管是东家还是打长工短工的都高兴啊。但不要迷信设计模式这些经验都是有适应场景的不懂就乱来很可能会事倍功半。还是那句话没有一种东西能包打天下。
三、例程
这方面的例程非常多这里简单上一个大家知道那么个意思就可以了。具体的可以参看网上的资料和相关书籍
//observer.h
#include iostream
class Observer {
public:Observer() {}virtual ~Observer() {}virtual void Change() {}
};class ObserverA : public Observer {void Change() { std::cout A Change call! std::endl; }
};class ObserverB : public Observer {void Change() { std::cout B Change call! std::endl; }
};//main.cpp
#include observer.h
#include algorithm
#include iostream
#include vectorclass Message {
public:void Push(Observer *o) { obs.emplace_back(o); };void Pop(Observer *o) { obs.erase(std::remove(obs.begin(), obs.end(), o), obs.end()); }void MsgUpdate() {for (auto o : obs) {o-Change();}}private:std::vectorObserver * obs;
};int main() {Observer *b1 new ObserverA();Observer *b2 new ObserverB();Message msg;msg.Push(b2);msg.Push(b1);msg.MsgUpdate();msg.Pop(b1);msg.MsgUpdate();delete b2;delete b1;return 0;
}很简单的一个观察者模式的例程。上面的例程其实有进一步优化的余地比如采用函数式语言的链式调用大家有兴趣的可以自己搞一搞。
四、总结
虽然在书籍上和网上有很多设计模式的特点比如什么面向对象编程思想可维护可扩展等等。其实就这是前面说的说得高大上而已。一个简单就代表了可维护性暗含了可扩展简单的东西本一般来说容易扩展而复杂的东西理解都需要很长时间怎么容易扩展同样简单可重复的东西自然就灵活其它情况也基本如此。 学习要抓住问题的本质不是说其它的东西不重要而是抓住本质后再学习其它的特点就非常容易弄明白和记清楚。