随笔分类 - 11 设计模式
摘要:1.观察者模式介绍 观察者模式又叫发布-订阅模式,它定义了对象间的一种一对多关系,当一个对象的状态发生改变时,所有依赖于它的对象都会收到通知并被自动更新。观察者模式就四个角色:抽象主题,具体主题,抽象观察者,具体观察者。抽象主题是一个抽象的接口或者抽象类,对主题的功能进行抽象,抽象观察者对具体的观察
阅读全文
摘要:1.中介者模式介绍 中介者模式,定义了一个中介对象来封装一系列对象之间的交互关系,中介者使各个对象之间不需要显式地相互引用,从而降低耦合性。在开发中我们会遇到各个对象相互引用的情况,每个对象都可以和多个对象进行交互,这时将会形成复杂的一对多结构的网状结构,各个对象之间过度耦合,这样不利于类的复用和扩
阅读全文
摘要:1.模板方法模式介绍 提到模板我们经常会想到简历模板/PPT模板等,以简历模板为例,不同的人可以使用一样的简历模板,在填充内容时根据自己的名字/工作经历等填写自己的内容,从而形成不同的简历。在OO中模板方法模式和现实中的模板十分相似,首先要有一个封装了不可变部分的抽象类(简历的大致结构,都有姓名、性
阅读全文
摘要:1.享元模式介绍 在软件开发中我们经常遇到多次使用相似或者相同对象的情况,如果每次使用这个对象都去new一个新的实例会很浪费资源。这时候很多人会想到前边介绍过的一个设计模式:原型模式,原型模式通过拷贝现有对象来生成一个新的实例,使用拷贝来替代new。原型模式可以很好的解决创建多个相同/相似实例的问题
阅读全文
摘要:1.组合模式 在软件开发中我们经常会遇到处理部分与整体的情况,如我们经常见到的树形菜单,一个菜单项的子节点可以指向具体的内容,也可以是子菜单。类似的情况还有文件夹,文件夹的下级可以是文件夹也可以是文件。举一个例子:一个公司的组织架构是这样的,首先是总公司,总公司下边有直属员工和各个部门,各个部门下边
阅读全文
摘要:1.装饰者模式介绍 装饰者顾名思义就是对一个类添加一些额外的装饰(功能)。我们想给一个对象添加一些额外的功能又不改变对象内方法的签名怎么做呢?最常用的方法就是继承了,子类继承父类,然后重写父类的方法。考虑一种情况,如我们要给父类中的Show方法添加三个新功能功能a、功能b、功能c,这三种功能组合在一
阅读全文
摘要:1.桥接模式介绍 桥接模式用于将抽象化和实现化解耦,使得两者可以独立变化。在面向对象中用通俗的话说明:一个类可以通过多角度来分类,每一种分类都可能变化,那么就把多角度分离出来让各个角度都能独立变化,降低各个角度间的耦合。这样说可能不太好理解,举一个画几何图形的例子:我们画的几何图形可以按照形状和颜色
阅读全文
摘要:1.代理模式介绍 在软件开发中有时会遇到不能直接使用对象的问题,如我们要使用的对象在进程外,甚至在远程的机器上,但是我们要使用这个对象的功能怎么办呢?代理模式就可以用来解决这个问题。举一个生活中的例子:一个害羞男孩追求一个叫如花的女孩,但是自己不敢送礼物,就找了一个朋友代理他给如花送礼物。就以这个例
阅读全文
摘要:1.外观模式介绍 外观模式也被叫做门面模式,这种模式的作用是:隐藏系统的复杂性,并向客户端提供了一个可以访问系统的统一接口,这个统一的接口组合了子系统的多个接口。使用统一的接口使得子系统更容易被访问或者使用。 以去医院看病为例,去医院看病时可能要去挂号、门诊、划价、取药等,让患者或患者家属觉得很复杂
阅读全文
摘要:1.适配器模式介绍 适配器模式的作用是将一个类的接口,转换成客户端希望的另外一种接口,适配器作为原始接口(我们的类中本来具有的功能)和目标接口(客户端希望的功能)之间的桥梁。举个例子:我们知道安卓数据线是不能给苹果手机充电的,但是我们没有苹果数据线,所以只能使用安卓数据线给苹果手机充电,这时怎么解决
阅读全文
摘要:1.建造者模式介绍 在软件开发中,有时我们要创建一个复杂的对象,这个对象由几个子部件按一定的步骤组合而成,这时候我们就可以使用建造者模式了。说到建造者我们首先想到的是盖房子,盖房子简单的说有三个步骤:打地基,砌砖,粉刷。我们就以盖房子为例解释建造者模式的用法。 建造者模式有三个角色:建造者,具体的建
阅读全文
摘要:1.原型模式介绍 在软件系统开发中,有时候会遇到这样的情况:我们需要用到多个相同实例,最简单直接的方法是通过多次调用new方法来创建相同的实例。如下: 但是有一个问题,如果我用要使用的实例创建起来十分耗费资源,或者创建起来步骤比较繁琐,上边的代码缺点就暴露出来了:耗费资源,每次创建实例都要重复繁琐的
阅读全文
摘要:1.抽象工厂模式介绍 上一篇我们了解了工厂模式,知道工厂模式可以解决简单工厂的缺陷(简单工厂添加新产品时要修改工厂类,不符合开闭原则),但是简单工厂和工厂模式都是只生产一种产品(前边的简单工厂和工厂都只生产鼠标),实际上戴尔和惠普公司不仅生产鼠标还生产键盘,为了解决系列产品的问题,就有了抽象工厂模式
阅读全文
摘要:1.工厂模式介绍 上一篇我们知道了简单工厂的缺点是:当我们添加一个新的产品时需要修改工厂类,这样就违背了开闭原则。工厂模式就是为了解决这一缺陷而出现的,解决的方法是把创建具体实例的任务放在了工厂的子类中,工厂只提供了创建实例的的接口,还以上一篇中的生产鼠标为例: 鼠标类: 工厂类只提供生产鼠标的抽象
阅读全文
摘要:1.什么是简单工厂 现实中的工厂负责生产产品,顾名思义,编程中的简单工厂就是一个生产对象的类,它的主要作用是创建具体的产品类实例。我们以一个生产鼠标为例来分析简单工厂的作用,鼠标有两种:戴尔鼠标和惠普鼠标,代码如下: 客户端代码: 程序运行如下: 我们可以看到程序运行没有问题,通过new一个Dell
阅读全文
摘要:设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性。在进行设计的时候,我们需要遵循以下几个原则:单一职责原则、开闭原则、里氏替代原则、依赖倒置原则、接口隔离原则、合成复用原则和迪米特法则。 1.单一职责原则 专业的人做专业的事,面向对象编程中类也是一样,一个类
阅读全文
摘要:1.迭代器模式介绍 迭代器模式主要用于遍历聚合对象,将聚合对象的遍历行为分离出来,抽象为一个迭代器来负责。迭代器模式用的十分普遍,C#/JAVA等高级语言都对迭代器进行了封装用于遍历数组,集合,列表等,因为各种高级语言都对这种模式做了很好的封装,所以这种模式的使用价值远大于它的学习价值,Martin
阅读全文