Generality

学习了 Effective Go 中 Generality 小节的内容 https://golang.org/doc/effective_go.html#generality

由于这个小节的内容稍有点抽象,因此写了以下示例程序以便加深理解。

/* Ver1 与 Ver2 是 Version 的两种不同的具体实现。
 * NewShow 接受一个 Version 作为参数,并返回一个 Show。
 * NewShow 不管 Version 的具体实现,只要是 Version 都可以接受,
 *         并且不管 Show 的具体实现,本例子虽然只给出了一种 Show 的实现 (ShowVer)
 *         但事实上换另一种实现也是可以的。
 */

package main

import "fmt"

type Version interface {
	Is() string
}

type Show interface {
	VerNum()
}

type ShowVer struct{
	V string
}
func (s ShowVer) VerNum() {
	fmt.Println("Ver.", s.V)
}

type Ver1 struct {
	V string
}
func (v Ver1) Is() string {
	return fmt.Sprint(v.V)
}

type Ver2 struct{}
func (v Ver2) Is() string {
	return "2"
}

func main() {
	ver1 := Ver1{"1"}
	ver2 := Ver2{}
	show1 := NewShow(ver1)
	show2 := NewShow(ver2)
	show1.VerNum()
	show2.VerNum()
}

func NewShow(ver Version) Show {
	v := ver.Is()
	return ShowVer{v}
}

  

本程序的结果是,打印

Ver. 1

Ver. 2

时间: 2024-11-08 22:22:54

Generality的相关文章

Java程序最容易犯的21种错误

1.Duplicated Code 代码重复几乎是最常见的异味了.他也是Refactoring的主要目标之一.代码重复往往来自于copy-and-paste的编程风格.与他相对应OAOO是一个好系统的重要标志. 2.Long method 它是传统结构化的"遗毒".一个方法应当具有自我独立的意图,不要把几个意图放在一起. 3.Large Class 大类就是你把太多的责任交给了一个类.这里的规则是One Class One Responsibility. 4.Divergent Cha

根据76大细分词性对单词进行归组(二)

词性的重要性不言而喻,尤其是对于自然语言处理来说,哪怕就是记单词,根据词性对单词进行归组也是非常有帮助的. superword是一个Java实现的英文单词分析软件,主要研究英语单词音近形似转化规律.前缀后缀规律.词之间的相似性规律等等. 各大词性及其包括的词: 32.N-COUNT-COLL(可数集合名词) (词数:50) 1 aristocracy army array audience band 2 cast chapter command commission committee 3 co

Markov Random Fields

We have seen that directed graphical models specify a factorization of the joint distribution over a set of variables into a product of local conditional distributions. They also define a set of conditional independence properties that must be satisf

LLVM example for main

#include "llvm/IR/CallSite.h" #include "llvm/IR/Instruction.h" #include "llvm/IR/IntrinsicInst.h" #include "llvm/IR/Intrinsics.h" #include "llvm/IR/Module.h" #include "llvm/IRReader/IRReader.h" #

软件配置管理复习

软件配置管理 第1章    软件配置管理概念与目标 软件配置管理(Software Configuration Management, SCM) (1)    定义(多个): l  软件配置管理是指一套管理软件开发和维护过程中所产生的各种中间软件产品的方法和规则,它是控制软件系统演变的学科. l  软件配置管理是一组针对软件产品的追踪和控制活动,它贯穿于项目生命周期的始终,并代表着软件产品接受各项评审. l  软件配置管理是贯穿于整个软件过程中的保护性活动,它被设计用来:(1) 标识变化:(2)

[中英双语] 数学缩写列表 (List of mathematical abbreviations)

List of mathematical abbreviations From Wikipedia, the free encyclopedia 数学缩写列表 维基百科,自由的百科全书 This article is a listing of abbreviated names of mathematical functions, function-like operators and other mathematical terminology. 这篇文章是一个数学函数,类似于函数的操作符和其

Support Vector Machines for classification

Support Vector Machines for classification To whet your appetite for support vector machines, here’s a quote from machine learning researcher Andrew Ng: “SVMs are among the best (and many believe are indeed the best) ‘off-the-shelf’ supervised learni

《重构:改善既有代码的设计》读书笔记

??如果一个人没有听说过<重构>这本书,那么他一定不敢说自己是程序员:如果一个人没有阅读过<重构>这本书,那么很难想象他会是一名优秀的程序员.这本书是很多公司要求Java程序员必读的三本书之一(另外两本书是<Java编程思想>和<Effective Java>),其实无关编程语言,是程序员就能够从这本书中受益. ??何谓重构?重构是对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低修改成本.重构是用微小的步伐修改程序,在这个

Lua 架构 The Lua Architecture

转载自:http://magicpanda.net/2010/10/lua%E6%9E%B6%E6%9E%84%E6%96%87%E6%A1%A3/ Lua架构文档(翻译) 十 102010 前段时间翻译了lua官方关于lua5架构设计的一份文档,现在分享给大家. 注意:所有版权都归lua官方所有,本人仅将其翻译为中文,以方便中文阅读者.翻译中出现任何错误导致的结果,本人不负任何责任. 如果有任何翻译错误,以及意见与建议,请email本人.邮件地址:[email protected]. 转载请注