面相对象的艺术|设计模式2(结构型)


“ 设计模式 ”是 “面向对象设计模式” 的简称,是软件开发人员在软件开发过程中面临的一般问题的解决方案。


主要用来应对 类 的变化。


“ 设计模式 ”又分为:创建型模式、结构型模式、行为型模式。


本文介绍的“结构型”设计模式是从程序的结构上解决模块之间的耦合问题。





首先是结构型模式的几个细分:

1.桥接模式:对象的接口与实现

2.适配器模式:可以将类的一个接口匹配另一个接口

3.合成模式:对象的组合

4.门面模式:一个类表示一个子系统

5.装饰模式:动态给对象添加职责

6.代理模式:一个简单的对象代替一个复杂的稍后会被调用的复杂对象

1.桥接模式—— 适应对象接口与实现的多维变化

对象的变化,分为:接口变化、实现变化、属性变化。

当出现单纬度的变化时(接口变化/实现变化),我们通常有两个解决放啊:水平关联/继承。



但是,当多个纬度时变化时,单一的使用继承会导致子类数量的快速增长,单一的使用水平关联会导致扩展性变差。

所以在适应多维度变化时,我们使用桥接模式,将接口与实现分离。


桥接模式


2.适配器模式——将一个类的接口转换成客户希望的另外一个接口

当原接口不可修改,A和B两个类的接口不一致,而需要将B类当A类来使用时,使用适配器模式。




适配器模式


3.合成模式—— 将对象组合成树形结构以表示"部分-整体"的层次结构


树形结构


一个树结构由两种节点组成:树枝节点和树叶节点。树枝节点可以有子节点,而一个树叶节点不可以有子节点。除了根节点外,其它节点有且只有一个父节点。

当我们需要抽象的问题,同样具又这样的性质的时候,就需要使用合成模式了。

例子来自:http://blog.csdn.net/koudaidai/article/details/7340192



合成模式


在“故事”类中,组合一个 “根节点类”,就可以实现,故事既可以只有一重也有多重。


4.门面模式——用户并不关注我们如果写的代码


在我们的生活中医院就是这样的。一般的医院都会分为挂号、门诊、化验、收费、取药等。看病的病人要想治好自己的病(相当于一个客户端想要实现自己的功能)就要和医院的各个部门打交道。首先,病人需要挂号,然后门诊,如果医生要求化验的话,病人就要去化验,然后再回到门诊室,最后拿药,经过一系列复杂的过程后才能完成看病的过程。


例子来自:http://blog.csdn.net/xingjiarong/article/details/50066133


解决这一办法的设计是,提供一个接待员(门面模式)


门面模式

用户并不关心我们如何实现的功能,他们更希望直接使用

5.装饰模式—— 在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能


装饰模式

装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

如果单一的使用继承,将导致子类数量激增,并且只能改变单个子对象的功能。

如果单一的使用水平关联,新的类与父类不再是父子关系。

6.代理模式——一个是你要访问的对象(目标类),一个是代理对象

代理模式提供了对目标对象另外的访问方式,即通过代理对象访问目标对象。这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。


代理模式
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,849评论 6 13
  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 3,889评论 1 15
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 她叫王伍 听起来特别像男孩子的名字 据说当年她的“父王母王”因为不希望她像他们一样丢三落四 所以给她取名叫小伍 而...
    王五杂货铺阅读 273评论 1 0
  • 卷一 夏若和爷爷一起住在江南一个小镇上。爷爷以前是镇上一所初中的语文老师,退休了之后就在家里写些字画贴补家用。 夏...
    夏暖冬凉的故事阅读 449评论 0 6