摘要:
一、初识中介者模式那些年,我们一起上过的大学,班级里有班长,有团书记。想一想如果没有QQ这种通讯工具的话,那么班长或者团支书该怎样下达消息呢??同时,班级上两个同学之间也可惜沟通啊,沟通一下,院里哪个女生,哪个帅哥呀~~~如果没有QQ的话,大概就是下面的情景:哎呀呀,看看这个乱那。如果同学的数目多起来就会变成网状的结构啦。原本把一个系统分割成一些对象是可以增强复用性的,但是现在的情况是,这些兑现之间存在着大量的联系,耦合性极高。这是很不利于复用的,同时这种情况使得系统的灵活性大大的降低,使得对系统的扩展很难,要是新转来一个学生的话,要改动的地方就多了去了。如果现在可以使用QQ,那么可以采用另一 阅读全文
摘要:
在设计模式中有两种模式很相似,它们就是状态模式和策略模式。使用场景状态模式:当对象的行为随对象的状态的改变而改变时,我们为了解耦多重判断条件,封装行为的变化,可以定义一个抽象的状态类,提供对象行为接口。具体与状态相关的行为,由它的子类去实现。策略模式:“策略”二字等同于算法,当现实系统中需要对算法动态指定,并且可以互相替换,可以抽象出算法的调用接口,具体的算法实现由具体的策略角色去实现,根据里氏替换原则,任何出现父类的地方都可以使用它的子类去替换,这样符合我们的业务需求。比较虽然两者都是抽象出父类规范调用接口,具体的行为由子类实现,环境对象同时包含父类的引用,但是这两者模式应用的场景完全不同。 阅读全文
摘要:
红与黑关于小小单件的问答如何创建一个对象? new MyObject();万一另一个对象想创建MyObject会怎么样?可以再次new MyObject吗? 是的,当然可以所以,一旦有一个类,我们是否都能多次地实例化它? 如果是公开的类,就可以如果不是的话,会怎么样? 如果不是公开类,只有同一个包内的类可以实例化它, ... 阅读全文
摘要:
我始终认为学习设计模式需要怀着一颗敬畏的心去探索,这一系列23种设计模式并不是一蹴而就,都是前人根据自己的经验逐渐演化出来,所以才会形成非常经典的理论。学习设计模式,我想最好的方式是根据自己的经验逐渐来推导它,这样你才理解了其中奥妙,而不是靠记忆背住了它,所以,这篇博文主要分析三种工厂模式的演变过程:来实现吧,最简单计算器代码能否复用性忘记面向过程吧,面向对象思想的引入多态,简化代码大杀器质的飞跃:简单工厂模式的运用迷途知返:拨开云雾见工厂方法暴走一击:抽象工厂+工厂方法我们先举一个最平常例子——写一个最简单的计算器,我们可能非常快就完成了第一个版本:来实现吧,简易计算器View Code?n 阅读全文
摘要:
一、初识职责链模式一个人在公司工作时间久了,难免遇到一点自己的私事,有私事就可能耽误上班的时间,可能就要请假,那么和谁去请假呢?可能是每个公司都有自己的请假制度。我们不妨假设:请假半天只要和部门主管说一声就行了,请假在半天到2天之间要通过人事部门,而请假超过两天就不那么好申请了,这时可能要总经理或者更高级别的人同意才行了。如果不考虑设计模式直接写代码,要完成这个逻辑就可能用到if—else或者多个if了:View Code 1 class Manager 2 { 3 private: 4 string name; 5 string level; 6 public: 7 ... 阅读全文
摘要:
SQL Server在堆表中查询数据时,是不知道到底有多少数据行符合你所指定的查找条件,它将根据指定的查询条件把数据表的全部数据都查找一遍。如果有可采用的索引,SQL Server只需要在索引层级查找每个索引分页的数据,再抓出所需要的少量数据分页即可。访问数据表内数以万计的数据分页与只访问少数索引的分页两者间的差异,让索引变成效能调校的最佳工具。堆表的结果示意图:堆表内的数据页和行没有任何特定的顺序,也不链接在一起。数据页之间唯一的逻辑连接是记录在 IAM 页内的信息。假设订单明细表中有100万条数据,需要查询某个订单的明细数据,如下:select * from T_EPZ_INOUT_ENT 阅读全文
摘要:
委托定义委托的语法和定义方法比较相似,只是比方法多了一个关键字delegate ,我们都知道方法就是将类型参数化,所谓的类型参数化就是说该方法接受一个参数,而该参数是某种类型的参数,比如int、string等等;而委托是将方 法参数化,说了上面的那个类型参数化之后,相信你也能猜到方法参数化的意思了,对,就是将方法作为一个参数传到一个委托中。首先来看看声明委托的语句:public deletate void MyDelegate();public:访问修饰符 delegate:关键字 void:返回类型 MyDelegate:委托名称 ( ):参数列表 看到声明大家会想了,为什么该委托的返回值, 阅读全文