`
kmplayer
  • 浏览: 508936 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

条款40:通过layering技术来模塑"有一个"(has-a)或"根据某物实现(is-implemented-in-terms-of)"

 
阅读更多
1,所谓laying,就是以一个class为本,建立另外一个class.
外层class含有内层class作为其数据成员.
例如:
class Address { ... };           // where someone lives
class PhoneNumber { ... };

class Person
{
public:
  ...
private:
  string name;                   // layered object
  Address address;               // ditto
  PhoneNumber voiceNumber;       // ditto
  PhoneNumber faxNumber;         // ditto
};

对比public继承"是一种",layering意味着"有一个"或"根据某物实现".

2,应用,利用List实现Set.
template<class T>
class Set
{
public:
	bool member(const T& item) const;
	void insert(const T& item);
	void remove(const T& item);
private:
	list<T> rep;
};

template<class T>
bool Set<T>::member(const T& item) const
{
	return find(rep.begin(), rep.end(), item) != rep.end(); 
}

template<class T>
void Set<T>::insert(const T& item) const
{
	if(!member(item))
		rep.push_back(item);
}

template<class T>
void Set<T>::remove(const T& item) const
{
	list<T>::iterator ite = find(rep.begin(), rep.end(), item);
	if (ite != rep.end())
		rep.erase(ite);
}

注:这里List和Set的关系不是"isa",Set不允许元素重复,而是"根据某物实现"的关系.

3,需要注意的是:当你使用laying技术来模塑两个class之间的关系时,你便在那些class之间产生了一个编译依存关系.
分享到:
评论

相关推荐

    DICE-Layering-Architecture-r19_pub.pdf

    DICE Layering Architecture 是 Trusted Computing Group (TCG) 发布的一份技术规范,旨在提供一个统一的架构层次结构,以便更好地实现可信计算环境。该规范的主要目的是确保计算机系统的安全和可靠性,防止恶意攻击...

    layering-cache:为监控而生的分布式多级缓存框架

    layering-cache简介layering-cache是一个支持分布式环境的多级缓存框架,使用方式和spring-cache类似。使用Caffeine作为一级本地缓存,使用redis作为二级集中式缓存。一级缓存和二级缓存的数据一致性是通过推和拉两...

    lecture-03-layering-naming-filesystem-design.pptx

    即使我们只需要一个位的信息,也需要读取或写入整个扇区。这种扇区地址性(sector-addressability)限制了对硬盘的访问粒度。 硬盘驱动器提供一个硬件接口(API),允许我们读取扇区到主内存,或者用新的数据更新...

    layering-cache-master.zip

    layering-cache是一个支持分布式环境的多级缓存框架,使用方式和spring-cache类似。它使用Caffeine作为一级本地缓存,redis作为二级集中式缓存。一级缓存和二级缓存的数据一致性是通过推和拉两种模式相结合的方式来...

    XAML in a Nutshell

    ### XAML in a Nutshell: An Overview of the XML-Based Markup Language for Windows Presentation Foundation #### Introduction XAML, standing for Extensible Application Markup Language, is an XML-based ...

    VoIP Demo源码演示

    VoIPDemo is intended as a sample to show how to use the RTC API for Windows CE, but also as a working application for demonstration and use (taking note of the limitations described below). ...

    Cross-Layering Optimization for Low Energy Consumption in Wireless Body Area Networks

    由于这些设备通常需要长时间工作且往往通过可穿戴或植入式技术实现,因此对低功耗和长寿命有着严格的要求。本文着重介绍了如何通过跨层优化的方法来减少WBANs的能耗。 #### 关键词分析与解释 - **无线体域网络...

    建筑工程设计信息模型制图标准.pdf

    建筑工程设计信息模型(Building Information Modeling,简称BIM)是建筑行业中一项重要的技术革新,它通过建立一个包含建筑物所有信息的数字化模型来进行建筑设计、施工和管理。BIM技术的应用要求制定相应的制图...

    system verilog constraint layering.rar_constraint_random_system

    例如,我们可以有一个基础策略类处理基本的数据类型约束,另一个处理时序约束,还有一个处理特定功能的约束。 文件“system verilog constraint layering.pdf”可能详细阐述了如何定义和使用这些策略类,包括如何...

    MapX 5.0开发手册

    - **实现原理:** 通过设定不同的可见性范围来实现。 **5.11 Generating Labels for a Layer** - **标签生成:** 为图层中的特征添加标签。 - **标签样式:** 可以自定义字体、颜色等。 **5.12 Annotations** - **...

    PCIe spec 1.0a

    根据提供的文件信息,我们可以深入探讨PCI Express (PCIe) Base Specification Revision 1.0a的主要内容及关键知识点。 ### 标题与描述分析 #### PCIe Spec 1.0a 此文档是关于PCI Express(简称PCIe)1.0a版本的...

    coffman-graham-layering-graph-draw

    Replit.com已经有一个经过编译的jar,可以用它快速绘制图形jar运行命令: kotlin -classpath main.jar MainKt "path to graph file" 示例: kotlin -classpath main.jar MainKt "examples/flow-from-lesson" ...

    Flex HtmlComponent

    一个在Flex中显示HTML网页的控件,当然不仅仅只这个,官方网站: http://drumbeatinsight.com/htmlcomponent  控件供述: - Extends the Adobe’s™ UIComponent class (no need to relearn a new system) - ...

    Descending of smoke layering interface in long channel hot smoke tests

    本文研究的是狭长通道内火灾烟气层沉降现象,主要通过96米长的全尺寸实验,测量了不同距离火源处的烟气层高度沉降过程。研究团队来自中国科学技术大学火灾科学国家重点实验室,由胡隆华、李元洲以及R. Huo主导。这项...

    规范 电子海图 技术

    ### 电子海图技术规范详解 #### 一、概述 中华人民共和国国家标准GB15702-1995《电子海图技术规范》是一部重要的技术标准,它规定了电子海图的制作原则、方法以及内容,并明确了电子海图应用系统在使用过程中的...

    Deployment with Docker: Apply continuous integration models, deploy applications

    idle machines into hosts for numerous Docker services.Learn what it takes to build a true container infrastructure that is scalable, reliable, and resilient in the face of increased complexities from ...

Global site tag (gtag.js) - Google Analytics