学习日记之抽象工厂模式和Effective C++
抽象工厂模式(Abstract Factory):提供一个创建一系列相关或者相互依赖对象的接口。而无需制定他们详细的类。
(1),工厂方法模式是定义一个用于创建对象的接口。让子类决定实例化哪一个类。
(2),为创建不同的产品对象,client应使用不同的详细工厂。
抽象工厂模式的长处和缺点:
(1)。优点是便于交换产品系列,因为详细工厂类在一个应用中仅仅须要在初始化的时候出现一次,这就使得改变一个应用的详细工厂变得很easy。它仅仅须要改变详细工厂就可以使用不同的产品配置。
(2),它让详细的创建实例过程和client分离。client是通过他们的抽象接口操纵实例。产品的详细类名也被详细工厂的实现分离。不会出如今client代码中。
(3),用简单工厂能够改进抽象工厂。
(4)。用反射+抽象工厂的数据訪问程序。
(5)。用反射+配置文件实现数据訪问程序。
(6)。全部在用简单工厂的地方,都能够考虑用反射技术来去除 switch 或 if。解除分支推断带来的耦合。
Effective C++:
1:转型操作符。
(1)。const_cast 通经常使用来将对象的常量性去掉(cast away the constness )。
它也是唯一有此能力的 C++-style 转型操作符。
(2)。dynamic_cast 主要用来转型“安全向下转型” (safe downcasting),也就是用来决定某对象是否归属继承体系的某个类型。它是唯一无法用旧式语法执行的动作,也是唯一肯呢过耗费重大执行成本的转型动作。
(3)。reinterpret_cast 意图运行低级转型,实际动作以及结果可能取决于编译器,这也就表示它不可移植。比如讲一个 pointer to int 转型为 一个 int。
这一类转型在第几代码以外非常少见。
(4)。static_cast 用来强迫隐式转换(implicit conversions)。比如将 non-const 对象转为 const 对象,或将 int 转为 double 等等。
它也能够用来运行上述多种转换的反向转换,比如将 void* 指针转为 typed 指针。将 pointer-to-base 转为 pointer-to-derived。
但它违法将 const 转为 non-const。
2:尽量少做转型动作
(1),假设能够,尽量避免转型,特别是在注重效率的代码中避免dynamic_casts。假设这个设计须要转型动作,试着发展无需转型的替代设计。
(2),假设转型是必要的。试着将它隐藏于某个函数背后。客户随后能够调用该函数,而不需将转型放进他们自己的代码内。
(3),宁可使用 C++-style 转型。不要使用旧式转型。前者非常easy辨识出来,并且有着比較愤懑别类的执掌。
3:避免返回 handles 指向对象内部成分
(1)。避免返回 handles (包含 references、指针、迭代器)指向对象内部。遵守这个条款可添加封装性,帮助 const 成员函数的行为像个 const。并将发生“虚吊号码牌”(dangling handles)的可能性降到最低。
学习日记之抽象工厂模式和Effective C++的更多相关文章
- Java设计模式学习笔记(四) 抽象工厂模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 抽象工厂模式概述 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问 ...
- 学习日记之享元模式和Effective C++
享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象. (1),享元模式能够避免大量很相似的开销.在程序设计中,有时须要生成大量细粒度的类实例来表示数据.假设能发现这些实例除了几个參 ...
- 重学 Java 设计模式:实战抽象工厂模式
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!
- 再起航,我的学习笔记之JavaScript设计模式06(抽象工厂模式)
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前两 ...
- 再起航,我的学习笔记之JavaScript设计模式07(抽象工厂模式)
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前两 ...
- C#设计模式学习笔记:(3)抽象工厂模式
本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7596897.html,记录一下学习过程以备后续查用. 一.引言 接上一篇C#设计模式学习笔记:简单工厂模式( ...
- 《Head First 设计模式》学习笔记——工厂模式 + 抽象工厂模式
设计模式 工厂模式:定义一个创建对象的接口,但由子类决定要实例化的是哪一个.工厂方法让类把实例化推迟到子类. 所谓的"决定",并非指模式同意子类本身在执行时做决定,而是指在编写创建 ...
- (@WhiteTaken)设计模式学习——抽象工厂模式
抽象工厂模式,可以向客户端提供一个接口,而客户端不用指定具体的类型创建对象,却能够创建多个产品族(一类具有共性产品,如地域等)的对象. 下面直接上代码. 1.苹果需要实现水果的接口,而苹果可以有北方的 ...
- C#学习笔记-抽象工厂模式
题目1:数据访问,通过数据库对用户表单的进行访问,数据库包含SQL Server,对用户表单进行“新增用户”和“查询用户”信息等操作. 分析: 首先,确认用户表单,里面包含两个ID和Name两个字段, ...
随机推荐
- 八:SQL之DQL数据查询语言单表操作
前言: DQL数据库查询语言是我们在开发中最常使用的SQL,这一章总结了单表操作部分的常用查询方式 主要操作有:查询所有字段.查询指定字段.查询指定记录.带IN的关键字查询,范围查询,陪查询.查询空值 ...
- break、continue、exit、return的区别和对比
break.continue.exit.return的区别和对比 一:说明 break.continue在条件循环语句及循环语句(for.while.if等)中用于控制程序的走向:而exit则用于种植 ...
- 学习python的第十天(内置算法:列表数据类型,元祖数据类型,字典数据类型)
5.8自我总结 1.列表类型内置算法 1.必须掌握 1.按索引取值(正向取值+反向取值),即可存也可以取 #用于取其中一个值 name = ['yang','wen','yi'] ##正方向取wen, ...
- django(django项目创建,数据库迁移)
Django项目的创建与介绍 安装:pip3 install django==1.11 查看版本号:django-admin --version 新建项目: 1.切到目标目录 2.django-adm ...
- 《C/C++工程师综合练习卷》之小试牛刀
第一套练习之感受 刚刚注册了牛客网的账号,准备在此衡量一下水平,好好磨练一番.看到推荐练习<C/C++工程师综合练习卷>,oh,20道题,2个小时.由于木有经验,好一番紧张~ 结果用了20 ...
- python库——h5py入门讲解
本文只是简单的对h5py库的基本创建文件,数据集和读取数据的方式进行介绍,作者刚接触h5py,完全靠看文档自学,如果哪里说的不对,欢迎纠正!如果读者需要进一步详细的学习h5py的更多知识,请参考h5p ...
- PAT Basic 1069
1069 微博转发抽奖 小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包.请你编写程序帮助他确定中奖名单. 输入格式: 输入第一行给出三个正整 ...
- 剑指offer面试题43:n个筛子的点数
题目描述: 把n个筛子扔在地上,所有筛子朝上的一面点数之和为s,输入n,打印出s的所有可能的值出线的概率. 书上给了两种解法,第一种递归的方法由于代码太乱,没有看懂=.= 第二种方法很巧妙,lz已经根 ...
- nginx中access_log和nginx.conf中的log_format用法
nginx服务器日志相关指令主要有两条: 一条是log_format,用来设置日志格式; 另外一条是access_log,用来指定日志文件的存放路径.格式和缓存大小 可以参加ngx_http_log_ ...
- BZOJ 3669 [Noi2014]魔法森林 ——SPFA / Link-Cut Tree
[题目分析] 大意就是有一张图,边权有两个值,ai和bi 找到一条路径,使得路径上的max(ai)+max(bi)最小. 遇到有两个权值或者多个权值的时候,如果他们互相影响,试着用分块搞一搞. 如果互 ...