
《设计模式》设计模式笔记
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。本专栏使用C++和Java两种语言分别实现每种设计模式。
Bruceoxl
BruceOu,于2017年10月13日开始在优快云上写博客,博客专注于嵌入式开发、人工智能等。欢迎各位朋友来访!
邮箱: ouxiaolong@bruceou.cn
展开
-
《设计模式》第三部分 结构型设计模式 第11章 组成模式(组合模式)(B:Java实现)
关于“组成模式”的具体讲解请看笔者博客《设计模式》第三部分 结构型设计模式 第11章 组成模式(组合模式)(A:C++实现)此文是“组成模式”的Java实现。透明式的组合模式的实现代码第一步:抽象构件package com;public interface Component { public void operation(); public void add(Compone...原创 2020-02-18 10:25:19 · 356 阅读 · 0 评论 -
《设计模式》第三部分 结构型设计模式 第11章 组成模式(组合模式)(A:C++实现)
3.1模式动机在现实生活中,存在很多“部分-整体”的关系,例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣月艮与衣柜以及厨房中的锅碗瓢盆等。在软件开发中也是这样,例如,文件系统中的文件与文件夹、窗体程序中的简单控件与容器控件等。对这些简单对象与复合对象的处理,如果用组合模式来实现会很方便。举个具体的例子,下图,是一个公司的组织结构图,总部下面有多个子公司,...原创 2020-02-18 10:18:23 · 503 阅读 · 0 评论 -
《设计模式》第三部分 结构型设计模式 第10章 桥接模式(B:Java实现)
关于“桥接模式”的具体讲解请看笔者博客《设计模式》第三部分 结构型设计模式 第10章 桥接模式(B:Java实现)此文是“桥接模式”的Java实现。第一步:实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用。package com;public interface Implementor { public void OperationIm();}...原创 2019-11-26 22:06:18 · 329 阅读 · 0 评论 -
《设计模式》第三部分 结构型设计模式 第10章 桥接模式(A:C++实现)
3.1模式动机设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案:第一种设计方案是为每一种形状都提供一套各种颜色的版本。第二种设计方案是根据实际需要对形状和颜色进行组合对于有两个变化维度(即两个变化的原因)的系统,采用方案二来进行设计系统中类的个数更少,且系统扩展更为方便。设计方案二即是桥接...原创 2019-11-26 22:02:40 · 418 阅读 · 1 评论 -
《设计模式》第三部分 结构型设计模式 第9章 适配器模式(B:Java实现)
关于“ 适配器模式”的具体讲解请看笔者博客《设计模式》第三部分 结构型设计模式 第10章 适配器模式(A:C++实现)此文是“适配器模式”的Java实现。类适配器的代码实现:目标接口:package com;public interface Target { public void request();}适配着类:package com;public class ...原创 2019-10-16 11:28:26 · 358 阅读 · 0 评论 -
《设计模式》第三部分 结构型设计模式 第9章 适配器模式(A:C++实现)
3.1模式动机在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。在软件设计中也可能出现:需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系统的接口规范不兼容,如果重新开发这些组件成...原创 2019-10-16 11:22:53 · 445 阅读 · 0 评论 -
《设计模式》第三部分 结构型设计模式 第8章 结构型设计模式简介
结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。结构型模式可以分为类结构型模式和对象结构型模式:类结构型模式关心类的组合,采用继承机制来组织接口和类,即由多个类可以组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系。对象结构型模式关心类与对象的组合,采用组...原创 2019-10-16 11:13:59 · 444 阅读 · 0 评论 -
《设计模式》第二部分 创建型设计模式 第7章 单例模式(B:Java实现)
关于“单例模式”的具体讲解请看笔者博客《设计模式》第二部分 创建型设计模式 第7章 单例模式(A:C++实现)此文是“单例模式”的Java实现。使用Java实现单例模式主要有两大类懒汉式(线程不安全)和饿汉式(线程安全)方法。下面介绍使用Java实现的单例模式。1.懒汉式,线程不安全是否 Lazy 初始化:是是否多线程安全:否实现难度:易这种方式是最基本的实现方式,这种实现最大的问...原创 2019-10-16 11:10:50 · 357 阅读 · 0 评论 -
《设计模式》第二部分 创建型设计模式 第7章 单例模式(A:C++实现)
2.1模式动机对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如何保证一个类只有一个实例并且这个实例易于被访问呢?定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。一个更好的解决办法是让类自身负责保存它的唯一实例。这...原创 2019-10-16 11:02:13 · 396 阅读 · 0 评论 -
《设计模式》第二部分 创建型设计模式 第6章 原型模式(B:Java实现)
关于“原型模式”的具体讲解请看笔者博客《设计模式》第二部分 创建型设计模式 第6章 原型模式(A:C++实现)此文是“原型模式”的Java实现。原型模式的克隆分为浅克隆和深克隆,Java 中的 Object 类提供了浅克隆的 clone() 方法,具体原型类只要实现 Cloneable 接口就可实现对象的浅克隆,这里的 Cloneable 接口就是抽象原型类。其代码如下:步骤一:具体原型类...原创 2019-09-06 15:47:48 · 371 阅读 · 0 评论 -
《设计模式》第二部分 创建型设计模式 第6章 原型模式(A:C++实现)
2.1模式动机在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样简单。图1再举一个最简单的例子来说明原型模式:记得上小学的时候,老师把需要做的课外习题写到黑板上,而下面的我们都要把这些题抄写到自己的本子上,回家做好,第二天交上来,也就是每道题,全班50个人,每个人...原创 2019-09-06 15:40:49 · 377 阅读 · 0 评论 -
《设计模式》第二部分 创建型设计模式 第5章 工厂方法模式(B:Java实现)
关于“工厂方法模式”的具体讲解请看笔者博客《设计模式》第二部分 创建型设计模式 第5章 工厂方法模式(A:C++实现)此文是“工厂方法模式”的Java实现。步骤一:抽象产品package com;public interface Product { public void show();}步骤二:具体产品package com;public class Concrete...原创 2019-09-04 18:33:04 · 334 阅读 · 0 评论 -
《设计模式》第二部分 创建型设计模式 第5章 工厂方法模式(A:C++实现)
2.1模式动机考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如圆形按钮、矩形按钮、菱形按钮等), 这些按钮都源自同一个基类,不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的外观,如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮类的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按钮对象,现在对该系统进...原创 2019-09-04 17:18:09 · 479 阅读 · 0 评论 -
《设计模式》第二部分 创建型设计模式 第4章 建造者模式(B:Java实现)
关于“建造者模式”的具体讲解请看笔者博客《设计模式》第二部分 创建型设计模式 第4章 建造者模式(A:C++实现)此文是“建造者模式”的Java实现。(1) 产品角色:包含多个组成部件的复杂对象。package com;import java.util.ArrayList;import java.util.List;public class Product { private...原创 2019-09-02 16:55:54 · 326 阅读 · 0 评论 -
《设计模式》第二部分 创建型设计模式 第4章 建造者模式(A:C++实现)
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。例如,计算机是由 OPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告...原创 2019-09-02 16:50:29 · 523 阅读 · 0 评论 -
《设计模式》第二部分 创建型设计模式 第3章 抽象工厂模式(B:Java++实现)
关于抽象工厂模式的具体讲解请看笔者博客第二部分 创建型设计模式 第3章 抽象工厂模式(A:C++实现)此文是“抽象工厂模式”的Java实现。步骤一:创建抽象产品创建产品A。package com;public interface ProductA { public void show();}创建产品B。package com;public interface Produ...原创 2019-09-02 15:55:52 · 363 阅读 · 0 评论 -
《设计模式》第二部分 创建型设计模式 第3章 抽象工厂模式(A:C++实现)
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。2.1模式动机为了更清晰地理解抽象工厂模式,需要先引入两个概念:产品等级结构:产品...原创 2019-09-02 15:38:43 · 467 阅读 · 0 评论 -
《设计模式》第二部分 创建型设计模式 第2章 创建型设计模式简介
创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。创建型模式在创建什么(What),由谁创建(Who),何时创建(When)等方面都为软件设计者提供了尽可能大的灵活性。创建型模式隐藏了类的实例的...原创 2019-09-02 15:26:59 · 449 阅读 · 0 评论 -
《设计模式》第一部分 简介 第1章 设计模式简介
1.1设计模式的产生背景“设计模式”这个术语最初并不是出现在软件设计中,而是被用于建筑领域的设计中。1977 年,美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造(A Pattern Language: Towns Building Construction)中描述了一些常见的...原创 2019-09-01 18:19:39 · 736 阅读 · 0 评论