朝花夕拾 - 应用了6年久经实际项目考验未变的代码 - singleton模式
最近整理自正式工作(从有上社保开始算起)8年来的知识。发现技术演变过程如下:
开发工具和.Net Famework: Visual Studio 2002 ->2003 -> 2005 -> 2008 -> 2010 -> 2012
ORM: 纯SQL -> Nhibernate -> NetTiers -> Linq To SQL -> Entity Framework
代码生成工具: CodeSmith -> 自己造轮子 -> T4
单元测试工具: NUnit -> MSTest
自动化测试工具: WatiN -> MSTest -> Selenigum -> WatiN
开发辅助工具: ReSharper -> Productivity Power Tools
控件的变换更是家常便饭。更不必谈曾经客串过Sharepoint, J2me Mobile开发呢。真的是一年一小变,三年一中变。
原因是每当一种工具用熟了,了解这种工具的优点缺点,就转到了另一种更先进的工具了。
但是居然有段代码应用了6年,久经所有实际项目考验居然都没变过,从我的广州时代,到北京时代,再到硅谷时代,见识和经历已经发生了翻天覆地的变化居然没变!(要知道,单是C#最简单的赋值语句都从string s变成了var s了)。这证明了这段代码真的是靠得住的。
这是我于2006年1月6日在CSDN上写的绝对原创的一篇文章,原文地址:http://blog.csdn.net/adalovelacer/article/details/572269
“回头望,已过万重山”
出来工作有段时间拉,用设计模式也有一段时间了,这几天有空就整理一下。先说singleton(单件)吧。
刚学设计模式的时候(我开始是学c++和做j2me出身的);
public class Sample {
private static Sample _Instance;
private Sample()
{
}
public static Sample GetInstance()
{
if (null == _Instance) {
_Instance = new Sample(); } return _Instance; } }
学会用get和set以后:
public class Sample
{
private static Sample _Current;
private Sample()
{
}
public static Sample Current
{
get
{
if (null == _Current)
{
_Current = new Sample();
}
return _Current;
}
} }
学会多线程操作以后:
public class Sample {
private static Sample _Current;
private static object _threadlook = new object();
private Sample()
{
}
public static Sample Current
{
get
{
if (null == _Current)
{
lock (_threadlook)
{
if (null == _Current)
{
_Current = new Sample();
}
}
}
return _Current;
}
}
}
学会用MSIL以后:
public class Sample {
private static Sample _Current;
private Sample()
{
}
public static Sample Current
{
get
{
if (null == _Current)
{
lock (typeof(Sample))
{
if (null == _Current)
{
_Current = new Sample();
}
}
}
return _Current;
}
}
}
当然还有根据具体解决环境中添加了相应的关键字和相关的语句,大概数了一下,还有九种写法。由于环境描述的问题。在此略过。
现在回头看这些代码的写法,感触万分,当时每个阶段写出第一次这样的代码的时候,感觉开心极了,很成功的感觉,现在回头看,学海无涯,当初是多幼稚啊,想发笑。不过也体会到一句话:学过其他语言,只能很快的学会另一种语言,但是要弄懂、精通这种语言,还是要花很大功夫。
就是上面最后那段代码,我用到了现在,6年啦,不管换了多少个项目,不管是在广州,北京,还是硅谷时代。所以分享给大家。
想想6年前,那时我才24岁,学东西那叫一个快,一个深啊。大家可以从上文看到,短短几个月,我写出来的代码变化是多么的大。
那时候我熟悉23个设计模式,研究还精深到如何结合C#的反射特性来整合和创造设计模式。
所以我从广州到北京找工作的时候,面试时有几道关于设计模式的题目我答得特别出色。试用期内我对泛型的掌控能力和CodeSmith的使用令我呆在这家公司到现在不知不觉5年了。
昨天才给同事打了电话,才想起当初进公司就是他面试我的,那时候6年前,我们都年轻,都在北京。现在,我们已经都在美国了。
自从来了美国之后,我将很大一部分时间花在签证,法律,企业运营和建立上面。以前在中国的时候,星期六都是睡懒觉。在美国,星期六早上还要7点爬起床,去听企业家课程。
对了,下一篇博文预告:<美国程序员的收入和怎样到美国做程序员>
上周我在公司内部做了一次为时两小时的内部培训,主要是分享中美文化差异和我在美国的工作经验和生活经验。现在我将一些程序员们会关心的问题,包括:
1。美国程序员的收入和状况
2。怎样到美国做程序员。
写成一篇博文。
那为什么我要在这里做博文预告呢?因为我想征集大家的意见来将我这篇博文写得更好。
就像我在公司做的内部培训一样,第一个小时我是征集了大家的意见做了一个提纲让一次连贯的演讲,然后第二个小时我就纯粹是大家问问题,我来解答和交流。
因为我深深知道,世界很大,美国很大,我的见识有限,很多事情就像我上面所写的对设计模式的感悟一样,几个月内就变化了几次,仅代表当时我的见识和想法。所以我深深知道我不是人生导师,我只不过是一个同事,一个你的朋友,早来美国,早来硅谷两年,纯粹和大家交流分享一下我的见闻而已,我们是平等的!三人同行必有我师,我们大家各自都是大家各自的老师。
所以欢迎大家的对博文<美国程序员的收入和怎样到美国做程序员>提任何意见!
最后,如果大家对美国生活,美国程序员生活有兴趣的话,可以加我的新浪微博: 硅谷叶伟民 http://www.weibo.com/u/2935940992
注:这篇文章不知啥时候发布时间出现了错乱,显示是2018年,实际上大概是2011年的时候发布的吧。
朝花夕拾 - 应用了6年久经实际项目考验未变的代码 - singleton模式的更多相关文章
- 微擎修改 icon.jpg 后项目主页未变
微擎修改 icon.jpg 后项目主页Logo未变 产生原因: 设置了自定义图标,但系统未找到该图标,就选择使用默认的起始图标 解决办法: 在项目根目录位置上传一个图标名为 icon-custom.j ...
- Android Studio向项目添加C/C++原生代码教程
说明:本文相当于官方文档的个人重新实现,官方文档链接:https://developer.android.com/studio/projects/add-native-code 向项目添加C/C++代 ...
- 在 ASP.NET Core 项目中使用 MediatR 实现中介者模式
一.前言 最近有在看 DDD 的相关资料以及微软的 eShopOnContainers 这个项目中基于 DDD 的架构设计,在 Ordering 这个示例服务中,可以看到各层之间的代码调用与我们之前 ...
- 通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile
通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁 ...
- 通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数
通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账 ...
- 通过游戏学python 3.6 第一季 第二章 实例项目 猜数字游戏--核心代码--猜测次数 可复制直接使用 娱乐 可封装 函数
猜数字游戏--核心代码--猜测次数 #猜数字--核心代码--猜测次数 number=33 amount=3 count=0 while count<=amount: conversion ...
- Nginx知多少系列之(十四)Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)
目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...
- VS Code项目中共享自定义的代码片段方案
VS Code项目中共享自定义的代码片段方案 一.问题背景 项目中注释风格不统一,如何统一注释风格 一些第三方组件库名称太长,每次使用都需要找文档,然后复制粘贴 部分组件库有自己的Snippets插件 ...
- Vue2/3 项目中的 ESLint + Prettier 代码检测格式化风格指南
Vue2/3 项目中的 ESLint + Prettier 代码检测格式化风格指南 因为平时都是使用 VSCode ESLint + Prettier 检测格式化不规范代码,但是随着接手的项目越来越多 ...
随机推荐
- java中this的N种使用方法
this可能是几乎所有有一点面向对象思想的语言都会引用到的变量,java自然不例外.只是,this有多少种用法,我也不知道了,让我们来see see. 由简入奢! 易. 来个例子说明下: public ...
- 两步验证杀手锏:Java 接入 Google 身份验证器实战
两步验证 大家应该对两步验证都熟悉吧?如苹果有自带的两步验证策略,防止用户账号密码被盗而锁定手机进行敲诈,这种例子屡见不鲜,所以苹果都建议大家开启两步验证的. Google 的身份验证器一般也是用于登 ...
- 工欲善其事,必先利其器-Python编辑器选择(2)
前言:工欲善其事.必先利其器 一款顺手的好的编辑器可以让程序员写代码更得心应手,效率也会更高,但是编辑器本身没有好坏,只有使用者使用起来是否顺手而已,这里简单给大家介绍几款常用的可以编辑Python的 ...
- python基础-字典(8)
一.字典介绍 字典和列表一样,也是存储多个数据的容器,只不过存储和读取的方式不同 字典的语法格式: 字典名 = {key1 : value1,key2:value2,key3:value3,……} 说 ...
- 2.java面向对象类与类/类与对象之间关系详解
继承.实现.依赖.关联.聚合.组合的联系与区别 下面的内容很基础,同时也很简单,但是也很重要. 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功 ...
- 比较 Spring AOP 与 AspectJ
本文翻译自博客Comparing Spring AOP and AspectJ(转载:https://juejin.im/post/5a695b3cf265da3e47449471) 介绍 如今有多个 ...
- Asp.net core 环境配置
参考: 在 ASP.NET Core 中使用多个环境 ASP.NET Core 中的配置 在项目的 Properties\launchSettings.json中可以配置多个环境 { "ii ...
- 谷歌浏览器提示Adobe flash player不是最新版本的解决方法
版权声明:本文为博主原创文章,未经博主允许不得转载. 参考资料 https://jingyan.baidu.com/article/a3a3f811c3d5058da2eb8a39.html 如果电脑 ...
- intellij idea maven project 无法显示dependencies
Intellj 自动载入Mave依赖是一个很人性化的功能,但不排除有时候会碰到问题,导致pom文件修改却没有触发自动重新载入的动作或者加载中途出现弱网的情况中断载入的,此时需要手动强制更新依赖. 如下 ...
- linux sar 命令详解(历史资源查看,如内存、CUP等等)
sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况.系统调用的使用情 ...