学习日记之抽象工厂模式和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两个字段, ...
随机推荐
- verilog RTL 编程实践之五
How to build and test a module 1.test have: generate .stimulus .check .respose 2.only one monitor ca ...
- (转)浅谈测试驱动开发(TDD)
测试驱动开发(TDD)是极限编程的重要特点,它以不断的测试推动代码的开发,既简化了代码,又保证了软件质量.本文从开发人员使用的角度,介绍了 TDD 优势.原理.过程.原则.测试技术.Tips 等方面. ...
- PHP过滤器 filter_has_var() 函数
定义和用法 filter_has_var() 函数检查是否存在指定输入类型的变量. 如果成功则返回 TRUE,如果失败则返回 FALSE. 语法 filter_has_var(type, variab ...
- Leetcode 329.矩阵中的最长递增路径
矩阵中的最长递增路径 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即不允许环绕). 示例 1: 输入: n ...
- 多线程下,多次操作数据库报错,There is already an open DataReader associated with this Command which must be closed first.
原文:https://www.cnblogs.com/sdusrz/p/4433108.html 执行SqlDataReader.Read之后,如果还想用另一个SqlCommand执行Insert或者 ...
- 北京师范大学第十五届ACM决赛-重现赛
Another Server 时间限制:1秒 空间限制:262144K 题目描述 何老师某天在机房里搞事情的时候,发现机房里有n台服务器,从1到n标号,同时有2n-2条网线,从1到2n-2标号,其中第 ...
- HDU-4738 Caocao's Bridges,注意重边不是桥!
Caocao's Bridges 题意:曹操赤壁之战后卷土重来,他在n个小岛之间建立了m座桥.现在周瑜只有一颗炮弹,他只能炸毁一座桥使得这些岛屿不再连通.每座桥上都可能会有士兵把手,如果想安放***那 ...
- mysqli 封装
<?php //header header('content-type:text/html;charset=UTF-8'); class DB { //定义属性 private $host;// ...
- heartbeat负载均衡详解
heartbeat高可用软件http://www.linux-ha.org/wiki/Main_Page 1 heartbeat作用通过heartbeat将资源(IP)从一台已经故障的计算机快速转移到 ...
- BZOJ 2242 [SDOI2011]计算器 ——EXGCD/快速幂/BSGS
三合一的题目. exgcd不解释,快速幂不解释. BSGS采用了一种不用写EXGCD的方法,写起来感觉好了很多. 比较坑,没给BSGS的样例(LAJI) #include <map> #i ...