
设计模式
文章平均质量分 63
sevenkj
这个作者很懒,什么都没留下…
展开
-
面向对象编程的软件设计原则
在开始Android软件实际APP开始之前,我们需要对面向对象设计原则及设计模式做一个初步的了解。才能在以后的实战过程中,少走弯路;使我们的软件开发生涯感觉到快乐、轻松。好了,废话少说,咱们今天给大家一起探讨一下软OOP中的软件开发设计原则。这些东东都是OOP的设计精髓,他们蕴藏着前辈留下的产物。目前,软件设计最基本原则有以下几种:单一职责原则、开放封闭原则、依赖倒置原则、接口隔离原则和里氏替换(原创 2014-11-18 13:42:31 · 690 阅读 · 0 评论 -
代理模式的设计
所谓代理,就是对真实对象的一个代理;代表着真实的对象行驶权利。我们先看看结构图:具体的代码如下://Subject 类abstract class Subject{ public abstract void Request();}//RealSubject 类,Proxy代理真实的实体对象public class RealSubject:Subject{ public原创 2015-01-04 13:53:30 · 417 阅读 · 0 评论 -
由正则表达式引申到解释器模式
平时我们经常会用到正则表达式来解释我们输入框的内容是否符合邮箱、电话号码、身份证等。其他它就是对我们输入的值进行一个个字符的校验,当满足的时候则返回True,否则返回False;这就是咱们今天要讲的典型的解释器模式。解释器模式的应用不仅这些,在早年的非智能手机上,自己可以根据要求编写出音乐的字符串,然后播放出音乐... 我们来看看什么是解释器模式?给定义一个语言,定义它的文法的一种原创 2015-02-26 09:54:15 · 1517 阅读 · 1 评论 -
以不变应万变---桥接模式
我们在项目开发的时候,尽量将不变的放在基类中,而让变化的部分在继承类中实现。但是在原始代码设计时,尽量先聚合--合成的设计原则,后在考虑用继承的方式(is-a 则考虑用继承方式);这样在后续维护的时候,就减少维护工作量。桥接模式就是这种方式。 什么是桥接模式?将抽象部分与它实现的部分分离,使得他们都可以独立地变化。嘻嘻,有点不好理解,转换一下:实现系统可能有多个角度分类,每一种分类都原创 2015-02-12 10:55:15 · 666 阅读 · 0 评论 -
开发多用户注册使用的网站---享元模式
我们在实际项目开发过程中,肯定遇到以下类似的情况:专为小型公司注册并显示的公司信息,提供不同样式的显示方式;我们不会为每个注册的账户的公司都开发出一套量身打造的网站,而且才用共享技术的方式来实现核心技术、其他变化部分采用外部变量的方式传入进行操作。这就是今天我们要讲的享元模式。 什么是享元模式?运用共享的技术有效地支持大量细粒级的对象。换种说法,就是减少创建对象的数量,减少系统开销。原创 2015-02-25 13:34:03 · 903 阅读 · 0 评论 -
常用的循环遍历数据方法---迭代器模式
咱们在C#项目开发过程中,经常使用foreach的方式来循环遍历某个聚合对象;可能已有很多人遗忘了它的工作原理;今天,我们从这里开始:实际上它是把已经聚集好的一个集合,我们不需要知道其实际的对象类型而循环读取数据;这个地方就用到了我们今天要讲的设计模式---迭代器模式;有兴趣的同学,可以下来了解一下IEumerator 和IEnumerable 接口。 什么是迭代器设计模式?提供一种原创 2015-02-11 09:59:32 · 903 阅读 · 0 评论 -
最简单的设计模式---单例模式
在Android操作系统中,常常使用到一种模式----单例模式。其实我们在项目开发过程中,也经常用到;例如:在C/S模式中,我们对工具栏的初始化;点击按钮弹出的对话框等。通常我们用一个全局变量使得一个对象访问,但它不能防止实例被多次实例化;最好的办法就是让类直接管理自己的实例对象,并返回实例对象。 什么是单例模式?保证一个类中仅有一个实例;并提供一个访问它的全局访问点。也就是说,一个原创 2015-02-11 14:34:36 · 629 阅读 · 0 评论 -
命令模式的应用
命令模式用得比较少,一般都是在实际项目开发的后发现需要用的时候我们通过重构来实现。在现实生活中,我们也用这个设计模式;例如:咱们去餐馆点菜的时,服务员美眉会给我们简绍些好吃的菜,若点菜时,厨房没有了会提示我们;吃饭到中途时,菜多可撤销、菜少可添加。我们不需要关心具体是哪个大厨炒菜。这个就是我们今天要讲的设计模式----命令模式。 将一个请求封装成一个对象,从而使得你可用不同的请求对客原创 2015-02-12 15:16:34 · 1082 阅读 · 0 评论 -
最复杂的设计模式---访问者模式
今天,我们一起来探讨最后一个、最复杂的设计模式 访问者模式;它表示一个作用于某个对象结构中的各个元素的操作。它使你可以在不改变个元素的类前提下,定义作用于这些元素的新操作。这个地方要注意:1.需要有个对象结构类用于存储循环遍历的方法的方式;2.访问者模式是对元素的操作;3.可以任意添加对这些元素的新操作。确实有点复杂,我们先看看其结构图:原创 2015-02-26 13:22:38 · 709 阅读 · 0 评论 -
设计模式大总结
为期1月份的设计模式之旅已走完,我们今天一起来总结咱们前面的东西;其实设计模式分为:创建模式、结构模式、行为模式。它们分别是对应那些呢?创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模原创 2015-02-27 11:08:42 · 629 阅读 · 0 评论 -
与状态模式相似的设计模式---职责链模式
今天我们要讨论的设计模式与前面提到的状态模式非常相似,他们不能的地方:状态模式是每个具体的状态处理自己状态的事务,若非自己状态处理的数据则将状态移动到一下一个具体状态类处理;而职责链则是根据自己的职责完成本职工作,若不能完成则判断是否已经关联了下一个环节职责,若存在则调用下一环节的处理。他们两个一个是在具体类中已经设定了下一环节,而另外一个则是在客户端先设定好职责链。 什么是职责链模原创 2015-02-13 10:12:02 · 630 阅读 · 0 评论 -
Form界面的各组件的工作原理---中介者模式
在VS项目开发过程中,我们创建一个页面后,系统为我们自动生成一些代码(.aspx,.cs),一个用于前台控件的摆放、另一个用于编写控件对应的事件操作。例如:我们在双击按钮后,系统自动生成一段Click的代码并在里面填写我们想要的操作。为什么界面上很多的按钮他们相互之间的操作都互不受影响?因为控件在操作的时候,不是自己操作自己,而是产生事件并发送的Form界面;再由Form界面按照接收到的事件,转发原创 2015-02-13 14:24:41 · 722 阅读 · 0 评论 -
基于restful风格的maven项目实践(融合spring)
我们我们经常在老式的项目开发过程中,遇到找java包的问题;甚至有时候一找一天就过去了。maven 是我们开发工程师的福音,它可以根据我们的配置自动的下载并加装到我们的工程中,并在发布的时候同时发布对应的Java包。这样大大提高了我们的工作效率,更有时间学习前沿的技术。 什么是maven? maven是专用于进行项目的配置管理工作;用maven创建的项目中必须包括一原创 2015-08-27 10:40:31 · 2564 阅读 · 0 评论 -
SOA平台架构解析
在当今大数据的时代,我们的应用系统从零开始逐渐庞大起来;甚至有时候老练的架构师都没有办法设计出好的架构出来。阿里巴巴公布了淘宝的技术架构后,很快在社会上引起了社会反响;几乎一夜间用在很多大型的系统中。今天我就一起来看看,这个架构以及优势: 大家看到图可能有点晕了,不怕现在我们一起梳理一下:从上面的图,我们可以看出阿里巴巴将我们的应用进行了拆分:分成了服务提供者(provider原创 2015-07-31 15:18:11 · 1190 阅读 · 0 评论 -
原型模式中的深浅复制
用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象,这就是原型模式。在.net框架中有个ICloneable接口,里面就有个Clone()的方法;我们在实际的开发过程中只需要实现这个接口并重新写Clone()方法就可以了。我们先看看结构图: 原型模式说白了就是复制一个更实例对象一样的对象;屏蔽了复制的细节问题。我们在实际的项目开发过程中会遇到深复制和浅复制两种。如果我原创 2015-01-05 10:42:23 · 572 阅读 · 0 评论 -
组合模式的详解
在Word文档中,我们经常会对一个字或者一段话进行设定它的大小、字体等属性;但很少停下来站在程序的角度,想想它是怎么样的原理?今天,我们就对此进行一个讲解。微软在设计的时候,应该是这样的:它把一个段话看成一个整体,而把单个字看成一个单独的部分;整体与部分之间的所有操作都是一样的,并用同一的方式进行调用(也就是说都是从同一个基类继承出来的)。在设计模式当中,我们把它叫组合模式。 如何原创 2015-02-09 14:23:35 · 591 阅读 · 0 评论 -
活字印刷引入简单工厂模式
中国的有四大发明:火药、造纸、指南针 、活字印刷。这个地方活字印刷技术促进了人类文化的传播。我们不谈这些。这给我们将设计模式有啥关系?第一,如果我们在排版字中有一个地方错误,我们可以直接将错误的地方进行替换。这个体现了可维护性;第二,我们排版字印刷完成后,我们可以把这些单个的保存好,以便下次的时候可以用,这个体现了可复用性;第三,活字印刷进行排版的时候,我们可以横着 或者竖着,这个体现了灵活性。活原创 2014-11-19 14:45:49 · 930 阅读 · 0 评论 -
简单工厂模式PK工厂方法模式
在前一章节我们讲到了简单工厂模式,它的已入确实为我们的代码增添了灵活性、可继续。那么为什么在还有工厂方法模式呢? 什么是工厂方法模式呢?定义一个创建对象的接口,让子类决定实例化哪个类。工厂方法使实例化延迟到子类中。简单点说就是为每一个具体类创建一个工厂类(此类是继承抽象工厂类)。那么我们在客户端时候,直接用对应的工厂类创建实例。 用简单工厂模式,我们如果需要添加行的计原创 2014-11-25 10:03:57 · 972 阅读 · 0 评论 -
由基金公司与股民 论外观模式(也叫门面模式)
前段时间,牛市很牛有部分股民大赚,但80%的股民还是亏损;估计有好多怕是新股民。其实主要还是对这个股市了解的太少,瞎掺合。大家都知道基金相对股市来说,比较稳定点,而只是赚得少点。为什么呢?因为这个将所有投资基金的钱积累起来由专业的基金投资团队买股票、买其他的社会投资项目;要知道他们可有对股市所需买的股票进行了深入的分析;而且将风险进行了分散。好了扯了这么多,我们引入需要探讨的设计模式---外观模式原创 2015-01-29 12:39:49 · 1121 阅读 · 0 评论 -
论模板方法设计模式
今天有点空闲,咱们来谈谈在设计模式中,相对简单的模板方法设计模块;其实我们经常在.net 或者Java里面用电,架构会把一些公共行为提取后放到抽象类中,我们在实际使用的时候,只需继续并修改变动的部分代码就实现我们想要的功能。 先看看如何定义:定义一个操作中的算法骨架,而将一些步骤延迟到子类实现。这样使得子类在不变动一个算法的结构上即可重新定义某些特定的步骤。 很简单吧,简单点说,就是原创 2015-01-29 10:14:39 · 667 阅读 · 0 评论 -
建造者模式的设计
四川人最喜欢吃回锅肉,但是可能你到不同的店里味道多少有些偏差。因为每个店它的做法有可能不一样;不要麦当劳、肯德基那样,生产薯条的工艺都是一样的。所以,我们在肯德基、麦当劳吃的薯条味道都一样的。嘻嘻,其实人家洋人是引入了在设计模块中的建造者模式。 什么是建造者模式?将一个复杂对象的构建与它的表示相分离;使得同样的建造过程创建不同的表示。这地方需要强调的是创建的顺序是固定的,不会发生大的变原创 2015-01-29 14:39:22 · 585 阅读 · 0 评论 -
灵活地应用抽象工厂方法模式
我们在实际项目开发过程中应该说用得较多的还是抽象工厂方法模式(例如:在开发出来的一个网站可能连接不同的数据,我们需要用抽象工厂的方式把实例化具体对象(SqlServerUser对象)工厂中去)。废话少说,我们先来看看定义:提供一个创建一系列相关或者相互依赖对象的接口,而不需要制定他们具体的类。 什么意思呢?有这个定义有点拗口,咱们解释一下:原创 2014-12-03 15:05:10 · 615 阅读 · 0 评论 -
深入认识单例模式
前段时间太忙没有时间写博客,今天我们一起来探讨一下这个单例模式。这个模式在Android系统架构中用的比较多,只有更深入的理解了,才能在这平台上创建出优秀的项目。什么是单例模式?就是保证一个类只有一个实例,并提供一个访问他的全局访问点。我们解析一下:首先,我们的定义的类只能实例化一个实例,如何做到呢?我们知道在类的实例,实际上是根据类的构造方法来做的。如果类中没有定义对应的构造方法,那么系统将默认原创 2014-12-23 13:34:13 · 538 阅读 · 0 评论 -
策略模式的详情
在很多的计算场合,我需要在不同的时间、地方,用不同的算法计算数据;那么就引入了我们的今天要讲的策略设计模式;什么是策略设计模式?就是定义了算法的家族,分别封装起来,让他们之前可以相互的进行替换,此模式让算法的变化,不影响使用算法的客户端; Strategy代码如下:abstract class Strategy{ //算法方法public abstract原创 2014-12-24 14:13:12 · 685 阅读 · 0 评论 -
由观察者模式的升级,得出委托代理
大家在实际项目开发过程成,有这么一种情况:在VS2010开发环境中,当我们创建一个页面后,我们将鼠标移动到设计界面时候,系统会自动显示能拖的组件;当鼠标移动到代码界面时候,系统自动隐藏组件;这个是怎么实现的呢?我们慢慢来将。咱先看看什么是观察者模式:定义了1对多的依赖关系,让多个观察者对象同时监听某一个主题对象;这个主题对象发生变化的时候,会通知所有的观察者对象,让他们能够自己更新自己。就是说我们原创 2015-02-02 14:41:03 · 619 阅读 · 0 评论 -
状态模式的应用
我们在项目开发过程中,经常遇到各种的判断情况,例如根据用户当前登录的的实际判断是上午、下午、或者晚上等。这个相对比较简单,我们可以用if else问题解决;但是若遇到算费功能(例如电费计算、中国移动每月的套餐实际的计算)就比较复杂了。如果我们在一个方法里面写太多的判断语句则针对后续维护都是很头疼的事情。我们应该尽量将这个语句进行拆分,让其更加简便。真正做到每个模块责任分解只做一个动作;不知道怎么弄原创 2015-02-03 13:49:10 · 928 阅读 · 0 评论 -
亡羊补牢的方法---适配器模式
我们在VS2010环境中,经常从数据库中查询数据并返回给DataSet,然后绑定前台显示。他们都知道它的原理吗?实际上在这个过程当中,数据做了一次转换。我们后天先不管你是Sqlserver、DB2、Oracle等数据库,它先将数据查询出来并返回到DataAdapter中,然后由DataAdapter转换成DataSet;所以,我们在前台操作的时候根本不用去关心是哪种数据库。这个地方DataAdap原创 2015-02-05 10:43:48 · 672 阅读 · 0 评论 -
存储当前的数据信息,用于恢复---备忘录模式
咱们在打游击的时候,经常出现以下情况:自己在玩某种游戏快挂的时候,系统提示是否恢复到原来的状态进行重新开战。有人说这个是把这个类才有用原型模式克隆一个和原来一模一样的对象,把原来的数据信息保存起来,然后在恢复就OK了。错了,兄弟,这样会使得我们的对象的所有的方法暴露出来。在不破坏封装机构的前提下,我们如何用代码实现? 我们今天讲讲备忘录模式,解决刚才我们上段提到的问题。在不破坏封装的原创 2015-02-05 13:15:56 · 755 阅读 · 0 评论 -
装饰器模式的设计原理
什么是装饰器模式?动态地给一个对象添加一些额外的工作职责,就增加功能来说,装饰器模式比继承的子类更灵活。 从以上图我们可以看到:最核心的类就是Decorator类;它在中间扮演中关键的作用。在继承需要包装类的基础上,其也私有了一个需要装饰类的对象;为什么我们需要继承需要装饰的类呢?我们可以看到在时间调用的时候,我们的方法可以实现我被装饰类的方法一样的调用。我们在Decorato原创 2015-01-04 10:18:18 · 1748 阅读 · 0 评论 -
SOA的实例
在前一篇文章中,我们讲诉了SOA的架构原理;今天我们将其具体的开发实例进行展示。先将大概开发思路:1.将所有的接口功能放在同一个工程下,这个工程非常重要;因为我们的服务提供者及消费者都会用到;2.针对接口功能的具体实现,并将对应的服务暴露到zookeeper注册中心中;3.消费者只需要引用接口功能的工程;在配置文件中,配置注册中地址及生成远程服务代理就可以在Java代码中调用了。这样做针对消费者端原创 2015-08-03 13:53:26 · 10163 阅读 · 0 评论