`
文章列表
中国自古有重男轻女的观念,在古代,未婚女子要想出去逛街都要经过父亲的同意,而有丈夫的则要请示丈夫,如果丈夫去世了,有儿子的还得请示儿子,这就是所谓的“三从”。果然很苦逼!我们用程序来模拟一下这个过程: ...
以前做对外做项目的时候,部门大致分为需求组,美工组,代码组,客户找到需求人员讨论需求,找到美工人员讨论页面,找到代码人员讨论功能。 <?php abstract class Group { public abstract function find(); public abstract function add(); public abstract function delete(); public abstract function change(); public abstract function plan(); } class Requiremen ...
还记得我刚毕业的第一家公司是做b2c的,当时要做一个进销存系统,相信做过的人都应该清楚。拿最简单的进销存系统为例,其可分为采购管理、销售管理、和存货管理,三个模块相互依赖,假设现在公司为一家卖电脑的经销商 ...
发邮件的功能想必都做过,发邮件相当的耗时,于是大多使用多线程来实现。但假设产生第一封邮件对象,放到线程1中运行,还没有发送出去,线程2也启动了,直接把邮件对象修改了,线程不安全了。在这里我使用原型模式来 ...
代理,百度百科解释道:以他人的名义,在授权范围内进行对被代理人直接发生法律效力的法律行为。 玩游戏的同学对代练肯定不陌生,找代练帮忙升级打怪,下面就以此例编写个简单的代理模式: 结构如图,首先定义一个游戏接口,接口有游戏的一些基本动作,如登录,打怪,升级。再定义一个玩家的类,继承游戏接口,实现动作。最后定义一个代理类,客户端通过调用代理实际完成玩家的动作。   <?php interface IGamePlayer{ public function login( $username, $password ); public function killBoss(); ...
在模板方法模式中,我们知道了如何通过模板批量的制作Hummer,但你会发现Hummer的start,stop,alarm,enginBoom这四个动作都是按固定顺序进行的。那么如果现在要制作任意顺序动作的Hummer该如何设计呢?比如说我现在制作A类型HummerH1,它先启动,后停止,就这两个动作。B类型HummerH2,它先启动,后鸣笛,最后停止。A类型HummerH2,先启动,后有引擎声。B类型Hummer2,先启动,后引擎声,最后停止。既然它们的顺序都是特定的,那不如就给它们私人定制吧。   以上是建造者模式与模板方法模式的结合,PHP实现代码如下:   <?php a ...
啥是模板方法模式?好像很厉害的样子。   现有两种车,悍马H1和悍马H2,对它们进行测试,需要开动,停止,鸣笛,引擎声。这两车有四个相同的动作,但是动作的内容不同,最后的测试执行这四个动作,就是说测试是相同 ...
如果把工厂方法模式看作是小厂的作风,那抽象工厂模式绝对是土豪,因为它具有多个业务品种,工厂富足了!   抽象工厂模式的官方定义为:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。   抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。 在工厂模式的例子中,可以出产出超级用户和普通用户,如果现在在此基础上区分性别,该如何? 如图所示,同样定义一个公共接口User,再定义两个子抽象类abstractSuperUser和abstractCommonUser,分别对应为超级用户和普通用户抽象类, ...
提到工厂,流水线的工作,不停的重复重复着,真是比我们码农还苦逼。   工厂模式使用的频率也是非常高,它的官方解释为:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式使一个类的实例化延迟到其子类。    如图所示,系统中有超级用户与普通用户两种,定义一个公共接口User类,定义一个公共抽象工厂类abstractUserFactory,userFactory类通过继承abstractUserFactory类实现创建User类的方法createUser,从而实现工厂模式,实现代码如下: <?php abstract class abstractUserFactory ...
说到单例模式,肯定觉得简单啊,不就只有一个实例嘛,自私的家伙。 确实很简单,但是现在我有几个问题 1.单例模式有什么好处? 2.单例模式有什么缺点? 3.什么情况下适合用单例模式? 4.如果我想只有两个实例,怎么 ...
上篇博客中讲到的分级聚类算法为我们返回了一棵形象直观的树,但是这个方法有两个缺点。 1.在没有额外的投入的情况下,树形视图是不会真正将数据拆分成不同组的。 2.该算法的计算量非常惊人,因为我们必须计算每两个配对项之间的关系,并且在合并项之后,这些关系还得重新再计算,所以在处理很大规模的数据集时,该算法的运行速度会非常缓慢。   K-均值聚类完全不同于分级聚类,因为我们会预先告诉算法希望生成的聚类数量,然后算法会根据数据的结构状况来确定聚类的大小。   K-均值聚类算法首先会随机确定k个中心位置,然后将各个数据项分配给最临近的中心点。待分配完成之后,聚类中心就会移到分配给该聚类的所 ...
一、单一职责原则(SRP) SRP原话解释:There should never be more than one reason for a class to change. 好处: 1.类的复杂性降低,实现什么职责都有清晰明确的定义。 2.可读性提高。 3.可维护性提高。 4.变更引起的风险降低。变更是必 ...
分级聚类是通过连续不断地将最为相似的群组两两合并,来构造出一个群组的层级结构。其中的每个群组都是从单一元素开始的。如图所示: 元素的相似程序是通过它们的相对位置来体现的,距离越近越相似。两两合并,直到合并最后两个群组。   聚类是无监督学习的一个例子。与神经网络或决策树不同,无监督学习算法不是利用带有正确答案的样本数据进行“训练”。它们的目的是要在一组数据中找寻某种结构,而这些数据本身不是我们要找的答案。聚类算法的目标是采集数据,然后从中找出不同的群组。   下面我就利用分级聚类算法对iteye和csdn的博客进行分类。   1.准备数据。利用feedparser解析博客rss ...
加权平均是这样一类求平均的运算:参与求平均运算的每一个观测变量都有一个对应的权重值。 加权平均的计算公式如图: 其中的x1....xn是观测变量,w1....wn是权重值。   我们现将其利用在影片的推荐。   我们可以查找与自己口味最为相近的人,并从他所喜欢的影片中找出一部自己还未看过的影片,不过这样做太随意了。有时,这种方法可能会有问题:评论者还未对某些影片做过评论,而这些影片也许就是我们所喜欢的。还有一种可能是,我们会找到一个热衷某部影片的古怪评论者,而根据topMatches所返回的结果,所有其他的评论者都不看好这部影片。   为了解决上面的问题,我们就需要通过一个加权的 ...
皮尔逊相关系数是比欧几里德距离更加复杂的可以判断人们兴趣的相似度的一种方法。该相关系数是判断两组数据与某一直线拟合程序的一种试题。它在数据不是很规范的时候,会倾向于给出更好的结果。   如图,Mick Lasalle为<<Superman>>评了3分,而Gene Seyour则评了5分,所以该影片被定位中图中的(3,5)处。在图中还可以看到一条直线。其绘制原则是尽可能地靠近图上的所有坐标点,被称为最佳拟合线。如果两位评论者对所有影片的评分情况都相同,那么这条直线将成为对角线,并且会与图上所有的坐标点都相交,从而得到一个结果为1的理想相关度评价。   假设 ...
Global site tag (gtag.js) - Google Analytics