摘要: 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。观察者模式的结构抽象主题(Subject)角色:主题角色把所有对观察考对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象,主题角色又叫做抽象被观察者(Observable)角色,一般用一个抽象类或者一个接口实现。抽象观察者(Observer)角色:为所有的具体观察者定义一个接口,在得到主题的通知时更新自己。这个接口叫做更新接口。抽象观察者角色一般用一个抽象类或者一个接口实现。在这个示 阅读全文
posted @ 2014-03-09 19:40 tlijian1989 阅读(431) 评论(0) 推荐(0) 编辑
摘要: 在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。工厂方法模式模式角色与结构抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BulbCreator与TubeCreator。抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象 阅读全文
posted @ 2014-03-09 19:27 tlijian1989 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 它之所以称为工厂模式是因为它负责"生产"对象.工厂方法的参数是 你要生成的对象对应的类名.工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。工厂模式有以下几种形态:1 . 简单工厂(Simple Factory)模式2 . 工厂方法(Factory Method)模式3 . 抽象工厂(Abstract Factory)模式简单工厂模式角色与结构:工厂类角色Creator (LightSimpleFactory):工厂类在客户端的直接控制下(Create方法)创建产品对象。抽象产品角色Product (Ligh 阅读全文
posted @ 2014-03-09 17:41 tlijian1989 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 为了一个类生成一个唯一的对象.最常用的地方是数据库连接.使用单例模式生成对象后,可以被其他众多对象使用.单例模式的特点:1 . 单例类只能有一个实例。2 . 单例类必须自己创建自己的唯一实例。3 . 单例类必须给所有其它对象提供这一实例。应用案例 阅读全文
posted @ 2014-03-09 17:33 tlijian1989 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 装饰模式可以在不使用创造更多子类的情况下,将对象的功能加以扩展。是继承关系的一个替代方案。装饰模式的结构抽象构件(Component)角色:给出一个抽象接口,以规范准备接收附加功能的对象。具体构件(Concrete Component)角色:定义一个将要接收附加功能的类。具体装饰(Concrete Decorator)角色:负责给构件对象附加的功能。应用案例 场景 : 文章功能拓展 文章类已经写好,有个取文章内容的功能. class article{ public function geiContent(){ echo '取出文章内... 阅读全文
posted @ 2014-03-09 15:11 tlijian1989 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。此模式和工厂方法模式有相似之处,工厂方法是根据环境的不同return不同的对象.而策略模式不return对象,是进一步计算返回结果.策略模式的结构环境(Context)角色:持有一个Strategy类的引用。抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。应用案例场景 : 计算器使用策略模式之前你可能用if else 或者switch 来做.if(加法) 阅读全文
posted @ 2014-03-09 14:01 tlijian1989 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 责任链是一种对象的行为模式,很多对象由每一个对象对其下家的引用而连接起来形成的一条链.请求在这条链上传递,直到链上得某一个对象决定处理这个请求.发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。责任链模式的结构抽象处理者(Handler)角色: 定义一个处理接口.具体处理者(ConcreteHandler)角色: 具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。应用案例场景: 帖子的举报处理一篇帖子,你可以点击举报.将违规的内容举报 阅读全文
posted @ 2014-03-09 12:26 tlijian1989 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 最近在考虑做个统计在线用户的功能。以前也做过,用的一些比较简单的方法,但是缺点也很明显:精确统计和服务器、数据库压力之间要做出平衡。 所以想找一个既能精确统计又能不占用太多服务器资源的方法。先说说一些平常的做法:一,每次用户操作更新其在线时间 这个方法很直接,在用户表里加一个字段update_time,每次用户进行操作,都更新这个字段为当前时间,一般是在一个被所有Action继承的基类里写这个操作。 然后定义一个过期时间,比如10分钟,表示10分钟没进行任何操作的用户默认为不在线。这样,统计当前在线用户的sql语句大概是这样selectcount(*)... 阅读全文
posted @ 2014-03-04 15:30 tlijian1989 阅读(1859) 评论(0) 推荐(0) 编辑
摘要: 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过 多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧对你有用。1. 为查询缓存优化你的查询大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样 阅读全文
posted @ 2014-03-04 15:24 tlijian1989 阅读(122) 评论(0) 推荐(0) 编辑
摘要: var groupLeft = ($(window).width() - $('弹窗').width()) / 2;var groupTop = $(document).scrollTop() + ($(window).height() - $('弹窗').height()) / 2; 阅读全文
posted @ 2014-03-04 14:56 tlijian1989 阅读(115) 评论(0) 推荐(0) 编辑