模式分类    载自 : http://blog.csdn.net/fanweiwei/article/details/1794804
从目的上来看
Ø       创建型模式
负责创建对象,封装对象创建行为
Ø       结构模式
处理类与对象间的组合关系
Ø       行为模式
封装类与类间的交互中的职责分配
从范围上来看
Ø       类模式处理类与子类的静态关系
Ø       对象模式处理对象间的动态关系
单件模式(Singletion)-创建型模式
重要声明 :
故事纯属虚构,如有雷同请勿对号入座,故事只是为了抛砖引玉,虽以第一人称和作者本人网名起但不代表本人真实想法,请勿把故事中人物和作者本人联系起来,故事本意只为模式创造前提条件
角色:
ü       皇帝   主演WenSi
ü       贵妃   杨玉环
ü       嫔妃   西施
ü       宫女   小桃红
ü       太监   三德子
ü       官员   A
ü       官员   B
剧情:
    开场白:最近迷上了《康熙微服私访记》做了一场白日梦(咨询了一下专业医生做白日梦有利于身心健康)作为至今光棍的我看康熙宫里粉黛3千还在外风流潇洒,自己也过会梦中的皇帝瘾。看看我的后宫生活:
    Wensi :三德子
    三德子:奴才三德子伺候陛下
    Wensi :摆驾嫔妃宫
    三德子:咋
    到了嫔妃宫………
    西施  :嫔妃西施叩见Wensi陛下
    Wensi :爱妃请起。
    旁白:一阵攀谈后 
西施  :夜已深,奴婢伺候Wensi陛下
……………………………………………………………
旁白:天亮上朝,朝堂之上
官员A:陛下陕西今年蝗灾请求朝廷赈灾
Wensi:准奏,命内务府拨银30万两
官员B:陛下江苏今年黄河决堤,请求朝廷赈灾
Wensi:准奏,命内务府拨银300万两(偶老家拨多点哇哈哈)
………………………………………
旁白:众臣商议国家大事,突然宫女小桃红来报
小桃红:皇上,贵妃杨玉环快不行了
Wensi:退潮,三德子摆驾贵妃宫,快快
三德子:咋,皇上摆驾贵妃宫
旁白:来到贵妃宫,见玉环脸色苍白,不忍再看
Wensi:玉环,朕在你身边
杨玉环:陛下,臣妾能在死前再看您一眼,臣妾知足了
旁白:说完玉环香消玉殒
Wensi:玉环(皇帝痛心不已)
旁白:皇帝一声长叹说道
Wensi:三德子摆驾嫔妃宫,找西施玩去。(众人皆倒…………)

呵呵最后搞怪了哈,故事就是故事大家不要浮想联翩哈,这个故事和我们今天要讲的模式有联系吗?有!大家看看我用红色标出来的对话就不难看出。天无二日,国无二君。在中华大地上只有一个皇帝,不会有第二个。不管在什么地方皇帝只有一个那就是我。让我们来看看我们如何用OOD来描述这些呢?

解释下为什么要这样做,用OOD的思想我们先从故事中可以知道一共用了几个角色,上面我已经罗列出来了,他们都是人,他们都有不同的地位(注意我的用此:是,有)。在设计中我们往往会出现具体角色(皇帝、贵妃。。。)直接继承与抽象类 人, 这是不对的!混淆了,is-a和has-a 的概念。地位和人类是聚合关系不是组合关系,就是说一个具体的个人不是生来就是皇帝不是生来就是封疆大吏,皇帝这个称号不是伴随着一个人从生到死,所以他们是地位的一种抽象。但一个人有自己的名字和年龄这个是生来就有的(有人会跟我钻牛脚尖说,人一出生是没有名字的,呵呵有意义吗)伴随着一个人的出生和死亡。
再看地位这个抽象类,因为有地位所以他们能做指挥比他地位低的人做事情所以这里他们共有一个Command方法.
再看接口伺候,皇帝是不用伺候别人的(父母除外)所以我没有把伺候的接口分给皇帝,其他角色都继承了伺候接口,这里是为了让大家理解下抽象和接口的异同何时用哪个更为妥当。
回过头来说说今天我们的主角皇帝,皇帝拥有自高无上的权利,在他的统治范围内不能用第二个皇帝所以他是我们单件模式的主角。老天爷下凡的儿子(即天子)只有一个人所以老天爷派下的皇帝始终都是一个(老天爷即一个简单的造人工厂)。
 
判定这个OOD设计是否合理我们依据我们第二章的设计模式原则来判定
1.    是否符合开闭原则
我们在新添一个角色敌人成员农民时只要继承地位类和接口伺候就可以了,没有修改任何其他内,同时做到了扩展,所以这个设计完成符合对内修改关闭和对外扩展的开闭原则
答案:符合
2.    是否符合里氏代换原则
我们在用抽现类地位去调用各个角色的Command方法时用具体角色的Command方法代替是没有问题的。
答案:符合
3.    是否符合合成复用原则
上面已经讲述过为何在人和具体角色之间多了地位的抽现类的原因,解释了is-a和has-a区别,所以这也是符合的
答案:符合
4.    是否符合依赖倒置原则
在老天爷这里我们创造出来的具体角色都是用抽象类地位返回的。
答案:符合
5.    是否符合接口隔离原则
皇帝没有继承接口伺候,其他的具体类都有
答案:符合
6.    是否符合抽象原则
不用多讲了
答案:符合
7.    是否符合迪米特法则
因为涉及到的方法很少所以这里看的不是太清楚,这里唯一能看出来的就是皇帝没有伺候的方法,他不关心这个所以也是符合的
答案:符合
总的来讲这个OOD设计是完全符合设计模式的要求的看看,OK下面来研究下皇帝这个单件类的实现。首先我们不能让别人随便的创建(NEW)一个皇帝类所以皇帝类的构造函数是私有的,通过自生一个静态方法提供给外界调用,皇帝类只能生成一次,其余再调用都是调用第一次生成的那个类

总结 :单件模式
意图:
保证一个类仅有一个实例,并提供一个访问它的全局访问点
动机:
项目中经常会有一些特殊需求的类,必须保证他们在系统
中有且只有一个实例,才能确保他们的逻辑的正确性后市良好的效率,如何绕过常规的构造器,提供一种机制来保证一个类的唯一性?
实用性:
l         当类只能有一个实例而且客户可以从一个众所周知的地方访问它
l         当这个唯一实例应该是通过子类化可扩展,并且客户应该无需更改代码就能使用一个扩展的实例时。
结构:
参与者:
Singletion类,在我的CODE中即皇帝类(HuangDi)
效果:
单件模式优点:
1.         对唯一实例的受控访问
2.         缩小名空间:Singletion模式是对全局变量的一种改进,它避免了那些存储唯一实例的全局变量污染名空间。
3.         允许对操作和表示的精化Singletion类可以有子类,而其用这个扩展类的实例来配置一个应用是很容易的,用户可以根据需要配置自己的Singletion子类并做进一步的精化。
4.         允许可变数目的实例:在一些系统里Singletion类也许不需要唯一但需要固定数目的同类所以我们在Singletion类上定义一个阀值控制用户实例的个数。
代码:

http://download.csdn.net/source/251706

http://www.winu.cn/thread-45247-1-1.html

重要补充说明:
       代码中我只理想的做成单线程实现的在多线程中需要考虑线程问题,控制稍微麻烦点其实只要LOCK一下你的皇帝类中的静态生成皇帝类的方法即可。

[设计模式] 设计模式面面观(3):单件模式(Singletion)-创建型模式相关推荐

  1. 06 工厂生产模式(创建型模式)

    工厂生产模式(创建型模式) 1> 从耦合关系谈起 耦合关系直接决定着软件面对变化时的行为 模块与模块之间的紧耦合使得软件面对变化时,相关的模块都要随之更改 模块与模块之间的松耦合使得软件面对变化 ...

  2. java 23种设计模式详尽分析与实例解析_Java 23种设计模式详尽分析与实例解析之一--创建型模式...

    模式分析:在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做.这个核心类仅仅负责给出具体工厂必须实现的接口,而不负责哪一个产品类被实例化这种细节,使得工厂方法模式允许 ...

  3. C#面向对象设计模式第二讲:Singleton Pattern单件模式(创建型模式)

    (根据MSDN Webcast相关课程整理) 模式分类: 从目的来看: 创建型(Creational):负责对象的创建 结构型(Structural):处理类与对象间的组合 行为型(Behaviora ...

  4. 02工厂模式+抽象工厂模式(创建型模式)

    • 工厂模式: – 实现了创建者和调用者的分离. – 详细分类: • 简单工厂模式:用来生产同一等级结构中的任意产品.(对于增加新的产品,需要修改已有代码,虽然某种程度不符合设计原则,但实际使用最多) ...

  5. Java设计模式05:常用设计模式之原型模式(创建型模式)

    1. Java之原型模式(Prototype Pattern)     原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象. ...

  6. 设计模式基于C#的实现与扩展——创建型模式(三)

    3. 抽象工厂 Provide an interface for creating familyes of related or dependent objects. 提供一个创建一系列相关或相互依赖 ...

  7. 3.Factory Method 工厂方法模式(创建型模式)

    1.定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使得一个类的实例化延迟到子类. 2.实现代码如下: /// <summary>/// 工厂方法 ...

  8. GOF23(3)之建造者模式(创建型模式)

    1.场景 我们需要建造一个比较复杂的产品,如神舟飞船.这个产品创建起来非常的复杂,它肯定是由很多的零件先组成组件,然后组件再组成产品的,那么就会涉及到组件组装的顺序问题. 实际开发中,我们所需要的对象 ...

  9. 备战面试日记(3.2) - (设计模式.23种设计模式之创建型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.6 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  10. GOF23设计模式(创建型模式)工厂模式

    目录: 一:工厂模式的核心本质 二:关于面向对象的六大基本原则 三:工厂模式的三大类详解(代码示例,详细分析) 首先,上咱本GOF23所有工厂模式的分类表格!!! 创建型模式 单例模式.工厂模式.抽象 ...

最新文章

  1. Ubuntu 系统 Pycharm中无法使用中文输入法问题
  2. 艾伟_转载:DataTable.NewRow 内存泄漏问题
  3. 正文处理命令及tar命令
  4. 纯CSS三级弹出菜单
  5. cms系统与dreamweaver建站
  6. 配置设备作为DHCP 服务器(基于全局地址池)
  7. 解决PowerDesigner中DBMS选项卡为空白
  8. 【Flink】Flink 控制台能消费 但是 Flink 任务不能消费 内置topic 导致问题
  9. 02-linux安装nodejs
  10. PIR 宣布被营利性机构收购,.org 顶级域名注册费用或上涨
  11. python三维可视化图,如何使用Python在(交互式)3D中可视化图形?
  12. Geoserver 发布 shp文件
  13. elasticsearch7.5.0 集群部署
  14. Java实现对PDF文件添加水印
  15. 为什么计算机集群叫云,为什么叫云计算?
  16. 对BLOG皮肤的具体修改
  17. python逐行读取excel_用python读取excel需要哪些技能
  18. Android中RemoteViews的实现
  19. 致程序员之家论坛的所有会员
  20. 启动容器后,即便映射了端口,使用docker ps 命令查看,ports列也是空

热门文章

  1. 来也科技收购Mindsay背后:新旧势力交锋智能自动化备受关注
  2. 网线有网,路由器连接之后没网,解决办法
  3. gtest之断言宏的使用以及三种事件机制
  4. 万物皆可傅里叶|傅里叶分析之掐死教程(完整版)
  5. 《网赚的秘密——草根网民淘金实战》一一1.4 网赚推广的重要性
  6. 无法访问eclipse官网?镜像源可以帮你
  7. win10 声音设置
  8. 嵌入式linux mtd,嵌入式Linux驱动设备之MTD技术详解
  9. 机器学习(一):概述
  10. java游戏管理器 闪退_手游频繁崩溃”闪退”? 从程序上找原因