设计模式 - 技术教程文章

一起学习设计模式-策略模式

大家好:我近期写了一个TCP长连接的框架,封装的Netty,序列化采用的是PB,内存缓存用的Google的Guava。项目托管在GitHub上,开源希望大家能用起来并且一起维护这个项目。我是做游戏服务器的,像客户端的引擎框架有Cocos2d , Unity等。而服务器没有相对来说比较好的开源的架构(或者说鄙人学识浅薄没有发现)。我也经历了几个游戏从开发到上线的这样一个过程,所以也看到过几个比较优秀的框架,现在的想法是能够开源一个服务器框架,...

设计模式重温

设计模式:[TODO]????机制. 核心???观察者模式: # 观察者模式 # 观察者模式有两个角色, 观察者和观察对象. 观察者的设置能够随观察对象的状态变化, 而进行改变.工厂模式: 1.超类:工厂模式是创建一个超类. 作为最主要的配置类. 2.不同子类 然后由几个不同的子类,继承该超类, 并在这个基础上, 重新赋予额外属性的不同的属性. 3.最后包装. 最后用一个类去包装不同的类. 这个时候在最后创建实例对象的时候, 只需要传递参数即可.建造者模...

设计模式六大原则

单一职责原则(Single Responsibility Principle)定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。解决方案:遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责P2功能。这样,当修改类T1时,不会使职责P2发生故障风险;同理,当修...

设计模式之创建型工厂模式【代码】

通过对产品类的抽象使其创建业务主要负责用于创建多类产品的实例。创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。定义一个创建对象的接口,让其子类决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行,最终生成复杂对象。主要解决接口选择的问题。您需要一辆汽车,可以直接从工厂里提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。var PageFactory = fu...

模版方法设计模式学习笔记【代码】

概述:模板方法模式就定义一算法的骨架,而具体的算法延迟到子类中来实现优点缺点:优点:使用模板方法模式,在定义算法骨架的同时,可以灵活的实现具体的算法,满足用户多变需求;缺点:如果算法骨架有修改,则需要修改抽象类1、装饰2、单利3、简单工厂4、工厂方法5、适配器6、模板public class Demo1_Template {/*** @param args*/public static void main(String[] args) {Demo d = new Demo();System.out.println(d.getTime())...

07.设计模式_适配器模式【代码】【图】

转载自 http://www.cnblogs.com/zhili/p/AdapterPattern.html一、引言在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象。那么如果将“将现存的对象”在新的环境中进行调用呢?解决这个问题的办法就是我们本文要介绍的适配器模式——使得新环境中不需要去重复实现已经存在了的实现而很好地把现有对象(指原来环境中的现有对象)...

设计模式解密(20)- 职责链模式【代码】【图】

1、简介定义:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。主要解决:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。本质:分离职责,动态组合。   分离职责:分离职责是前提,只有先把复杂功能分开,拆分成很多的步骤和...

[Js-设计模式]单例模式(饿汉,懒汉,登记式)【代码】【图】

·单例模式的特点:  1. 单例类只能有一个实例。  2. 单例类必须自己创建自己的唯一实例。  3. 单例类必须给所有其他对象提供这一实例。·各种单例模式的特点:  ·懒汉式是延时加载,在需要的时候才创建对象,避免内存浪费,但存在线程安全问题。  ·饿汉式线程安全,类一加载就实例化对象,所以要提前占用系统资源。  ·登记式单例模式克服了饿汉以及懒汉单例的不可继承问题,其子类在登记时才被创建,并且子类的实例化方式...

自动调整速率的Actor设计模式【代码】

问题背景与数据库或者存储系统交互是所有应用软件都必不可少的功能之一,akka开发的系统也不例外。但akka特殊的地方在于,会尽可能的将所有的功能都设计成异步的,以避免Actor阻塞,然而无法避免IO这类的阻塞操作。我们往往会把IO消息发送给单独的Actor进行处理,避免业务主逻辑受到阻塞。在处理IO消息时,有两种模式:批量和单条。批量是指一次性处理多个消息,这样可以减少与存储系统的交互,提高吞吐量,适合处理大量消息;单条...

[设计模式]策略模式【代码】

?策略模式(Strategy Pattern)中体现了两个非常基本的面向对象设计的原则–封装变化的概念–编程中使用接口,而不是对接口的实现?面向接口的编程策略模式的定义–定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。–策略模式使这些算法在客户端调用它们的时候能够互不影响地变化?策略模式的意义–策略模式使开发人员能够开发出由许多可替换的部分组成的软件,并且各个部分之间是弱连接的关系。–弱连接的特性使软件具...

java设计模式_外观模式【代码】【图】

package com.wangbiao.design.facade;/** * * @Title: Client.java * @Package com.wangbiao.design.facade * @Description: TODO * @author wangbiao * @date 2014-9-20 下午03:56:08 * @version V1.0 */public class Client { public static void main(String[] args) { Facade facade = new Facade(); facade.methodA(); facade.methodB(); }}package com.wangbiao.design.facade;...

图解Java设计模式之原型模式【代码】【图】

图解Java设计模式之原型模式克隆羊的问题原型模式 - 基本介绍原型模式在Spring框架中源码分析浅拷贝的介绍深拷贝基本介绍 克隆羊的问题现在有一只羊tom,姓名为 : tom,年龄为 :1,颜色为 :白色,请编写程序创建和tom羊属性完全相同的10只羊。传统方式解决克隆羊的问题package com.example.demo.prototype;public class Sheep {private String name;private int age;private String color;public Sheep(String name, int age, S...

连载25:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)【图】

二分图 二分图又称作二部图,是图论中的一种特殊模型。设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。简而言之,就是顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属于这两个互不相交的子集,两个子集内的顶点不相邻。无向图G为二分图的充分必要条件是,G至少有两个顶...

设计模式之单例【代码】

描述一个类只能创建一个实例,并提供一个访问它的全局访问点。接下来将介绍两种写法。饿汉模式public class Singlton{public static void main(String[] a){Singlton01 s1=new Singlton01();//创建实例对象 } } class Singlton01{//构造方法私有化private Singlton01(){}//定义一个静态的成员变量,来接受唯一创建的对象private static Singlton01 s=new Singlton01();//定义一个静态方法用于把对象返回给调用者public static Sing...

01 设计模式之单例模式【代码】

1 场景分析平常开发中,调用其他系统的接口是很常见的,调用一般需要用到一些配置信息,而这些配置信息一般在配置文件中,程序启动时读取到内存中使用。例如有如下配置文件。# 文件名 ThirdApp.properties appId=188210 secret=MIVD587A12FE7E 程序直接读取配置文件,解析将配置信息保存在一个对象中,调用其他系统接口时使用这个对象即可。package com.chenpi.singleton;import java.io.IOException; import java.io.InputStream;...

<四>读<<大话设计模式>>之代理模式

代理模式我想大家即便不熟悉也都听过吧,从字面意思上看就是替别人干活的,比如代理商。在项目的实际应用中也有很多地方用到,比如spring通过代理模式生成对象等。代理模式的书面定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 在《《大话设计模式》》一书中以一个有男朋友的女孩让“小菜”帮忙修电...

5.大话设计模式-代理模式【代码】【图】

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace DesignModel {publicclass Proxy:IAction{ZQZ zzz = null;public Proxy(ZQZ mm){zzz = mm;}publicvoid SendFlower(){zzz.SendFlower();}publicvoid SendCake(){zzz.SendCake();}}publicinterface IAction{void SendFlower();void SendCake();}publicclass ZQZ : IAction{publicstring myname { se...

设计模式总结

设计模式的实现并不难,对着例子来,很快就能敲出来。但是,在什么情况下用什么设计模式,这是个问题,最近总结了一下:设计模式用法单例保证类的实例只有一个简单工厂根据参数创建对应具体子类策略算法、规则的封装、传入具体调用,调用具体算法装饰者动态对一个对象进行增属性、调用方法等操作,链式操作,随意组合。梳头、画眉、只梳头不画眉、只画眉不梳头工厂方法创建类,一个实现类要有一个工厂类。总是通过对应的工厂类创建...

UML与设计模式【图】

前言如何成为象棋高手先来讲一讲如何成为一名象棋高手的步骤,无非就是这么四步: 1.学习棋盘布局、棋子名称等 2.学习规则,棋子的走法 3.研究棋局,探寻方法 4.学习更多的经典的棋局如何成为软件开发工程师1.学习算法、数据结构 2.学习编程的方法,例如模块化、面向对象等 3.学习设计模式 4.学习更多的设计模式其实成为象棋高手和软件开发工程师都是一样的步骤,我们也可以把学习软件开发的东西等价一下,就会发现学习的东西无非不...

JS观察者设计模式:实现iframe之间快捷通信【代码】【图】

观察者设计模式又称订阅发布模式,在JS中我们习惯叫做广播模式,当多个对象监听一个通道时,只要发布者向该通道发布命令,订阅者都可以收到该命令,然后执行响应的逻辑。今天我们要实现的就是通过观察者设计模式,实现iframe之间的通信。一、top对象一般的JS书里都会在讲框架集的时候讲top,这会让人误解,认为top对象只是代表框架集,其实top的含义应该是说浏览器直接包含的那一个页面对象,也就是说如果你有一个页面被其他页面以...

js原生设计模式——13桥接模式(相同业务逻辑抽象化处理的职责链模式)

桥接模式之多元化类之间的实例化调用实例<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>桥接模式之多元化类之间的实例化调用</title> <script type="text/javascript"> //多维类的声明和调用(有点像类职责链模式) //这些功能类也可看作是功能模块的抽象层 //运动类模块 var Speed = function(x,y){ this.x = x; this.y = y; } Speed.prototype.run = function()...

常用的设计模式

1.工厂方法模式(Factory Method)简单工厂模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码;2.单例模式(Singleton)单例对象(Singleton)是一种常用的设计模式。在 Jav...

js架构设计模式——MVVM模式下,ViewModel和View,Model有什么区别

MVVM模式下,ViewModel和View,Model有什么区别 Model:很简单,就是业务逻辑相关的数据对象,通常从数据库映射而来,我们可以说是与数据库对应的model。View:也很简单,就是展现出来的用户界面。基本上,绝大多数软件所做的工作无非就是从数据存储中读出数据,展现到用户界面上,然后从用户界面接收输入,写入到数据存储里面去。所以,对于数据 存储(model)和界面(view)这两层,大家基本没什么异议。但是,如何把model展现到...

PHP——大话PHP设计模式——PSR-0规范【图】

原文:http://www.cnblogs.com/Chenshuai7/p/5520965.html

24种设计模式学习笔记之建造者模式【图】

建造者模式-----(创建型设计模式) 建造者模式也叫创建者模式 是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。适用场景:隔离复杂对象的创建和使用,相同的方法,不同执行顺序,产生不同事件结果多个部件都可以装配到一个对象中,但产生的运行结果不相同产...

php设计模式 Bridge (桥接模式)

复制代码 代码如下:<?php /** * 桥接模式 * * 将抽象部份与它实现部分分离,使用它们都可以有独立的变化 */ abstract class Implementor { abstract public function operation(); } class ConcreteImplementorA extends Implementor { public function operation() { echo "ConcreteImplementorA Operation<br/>"; } } class ConcreteImplementorB extends Implementor { public function operation() { echo "ConcreteImplementor...

【设计模式】文章摘要 查找联系人控件【图】

设计模式,真的非常像一个长,我们甚至从类图中存在的类图的直接进化。 他们中的一些,像类图。有些语言近似,但它有一个不同的名称,不同“马甲”。让我们快来认一认。第一组:模板方法PK 建造者模式PK 工厂方法模板方法建造者模式工厂方法三者比較:同样点,主要思想都是定义一个框架。然后将一些步骤延迟到子类。 不同点,首先。模板方法模式是行为型模式。而建造者模式工厂方法都是创建型模式。 两两比較:模板VS 建造者 建...

Javascript设计模式-----策略模式【代码】【图】

一、定义策略模式定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算饭的客户.二、正文相信大家在web开发的时候都接触过jquery验证插件jquery.validate.js, 接下来我们通过此插件的源码和用法来展开讨论策略模式的用法。jquery.validate.js在线源码网址:http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.js1、纵观整个源码我们可以发现验证插件主要通过jquery的ext...

大话【设计模式】

一、简介设计模式是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。二、六大原则a、单一职责原则【基本介绍】对类来说的,即一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2。 当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为 A1,A2【注意事项和细节】降低类的复杂度,一个类只负责一项职责提高类的可读性,可维护性 降低变更引起的风险通常情况下,我们应当遵守单...

设计模式(四) : 创建型模式--单例模式【代码】【图】

单例模式的话,类图上来看是最简单的设计模式,就是一个类只能有一个自己的实例。单例模式通常来说我们就有Lazy loading的和不是Lazy loading的。《java与模式》里面的关于这两种的类图,:可以看到一个是现开始就实例话的,这样的话不符合我们的lazy loading,还有一种是在getinstance方法里头去new的,这样的话会有线程安全的问题,我们提供了双重检查锁。下面看示意代碼︰1. 静态初始化:package com.javadesignpattern.Single...