- 3
- 0
- 约8.42千字
- 约 14页
- 2021-03-10 发布于山东
- 举报
种设计模式汇总设计模式-原
型模式
———————————————————————————————— 作者:
———————————————————————————————— 日期:
?
设计模式 原型模式
概述
在软件系统中 , 有时候面临的产品类是动态变化的,而且这个产品类具有一定的等级结构。这时
如果用工厂模式, 则与产品类等级结构平行的工厂方法类也要随着这种变化而变化, 显然不大合
适。那么如何封装这种动态的变化?从而使依赖于这些易变对象的客户程序不随着产品类变化 ?
意图
用原型实例指定创建对象的种类 , 并且通过拷贝这些原型创建新的对象。
结构图
Pr oto ty pe 模式结构图
生活中的例子
Prot o t y pe 模式使用原型实例指定创建对象的种类。新产品的原型通常是先于全部产品建立
的,这样的原型是被动的,并不参与复制它自己。一个细胞的有丝分裂,产生两个同样的细胞 ,
是一个扮演主动角色复制自己原型的例子 , 这演示了原型模式。 一个细胞分裂 , 产生两个同样基因
型的细胞。换句话说,细胞克隆了自己。
?
使用细胞分裂例子的 Prot o ty p e 模式对象图
原型模式解说
我们考虑这样一个场景, 假定我们要开发一个调色板, 用户单击调色板上任一个方块, 将会返回一个对应的颜色的实例,下面我们看看如何通过原型模式来达到系统动态加载具体产品的目的。
很自然 , 我们利用O O的思想,把每一种颜色作为一个对象,并为他们抽象出一个公用的父类 , 如
下图:
?
实现代码:
public
abst ract class
Col or
{
pu bli c abstract void Dis pla y();
}
pu bli c c l ass Re dColor:Colo r
{
publ i c o verride void Display()
{
Con sole.Writ eLine( " Re ds RG B Valu es are: 255,0,0) ;
}
}
publ ic cl ass GreenC olor:C olor
{
publ i c overr i de void Dis play ()
{
Consol e.WriteLine( " Gr ee n' s RG B V a lues a re:0 ,255,0 );
}
}
客户程序需要某一种颜色的时候 , 只需要创建对应的具体类的实例就可以了。 但是这样我们并没
有达到封装变化点的目的,也许你会说,可以使用工厂方法模式 , 为每一个具体子类定义一个与
其等级平行的工厂类 , 那么好,看一下实现 :
?实现代码:
publ ic ab str ac t clas s Co lor Facto ry
{
pu blic abs t ract Colo r Crea t e ();
}
pub li c cl a ss RedFac tory:Co lo rFactory
{
publ ic over ride Co lor Crea te()
{
retur n new RedColor( );
}
}
ubl i c class Green Factor y: ColorFactory
{
ublic over ri de Color Creat e ()
{
return new Gre e nColor() ;
}
}
实现了这一步之后, 可以看到, 客户程序只要调用工厂方法就可以了。 似乎我们用工厂方法模式
来解决是没有问题的。但是 , 我们考虑的仅仅是封装了 new 变化 , 而没有考虑颜色的数量是不断
变化的 , 甚至可能是在程序运行的过程中动态增加和减少的,那么用这种方法实现,随着颜色数
量的不断增加,子类的数量会迅速膨大,导致子类过多
, 显然用工厂方法模式有些不大合适。
进一步思考, 这些
C o lor
子类仅仅在初始化的颜色对象类别上有所不同。
添加一个
Colo rT ool
这样的类
, 来参数化的它的实例,而这些实例是由
Co l or
支持和创建的。我们让
Colo r Tool
通
过克隆或者拷贝一个
Col or子类的实例来创建新的
Col or,这个实例就是一个原型。如下图
所示 :
?
实现代码:
abstra ct cla ss C olo rProt otyp e
{
public ab st ract Colo rPr oto type Cl on e();
}
clas s ConcteteCo lorP rot oty pe : Col orProtot ype {
r iva te int _ red
您可能关注的文档
- 社区安全诊断.docx
- 社区工作者面试题.docx
- 社区护士实习小结.docx
- 社区村规民约.docx
- 社区爱国卫生制度.docx
- 社区环境综合整治表态发言.docx
- 社区超市创业计划书.docx
- 社区超市投资计划书.docx
- 社区高血压健康教育计划书.docx
- 社工站社区综合项目工作总结报告.docx
- 2025-2026学年天津市和平区高三(上)期末数学试卷(含解析).pdf
- 2025-2026学年云南省楚雄州高三(上)期末数学试卷(含答案).pdf
- 2025-2026学年甘肃省天水市张家川实验中学高三(上)期末数学试卷(含答案).docx
- 2025-2026学年福建省厦门市松柏中学高二(上)期末数学试卷(含答案).docx
- 2025-2026学年广西钦州市高一(上)期末物理试卷(含答案).docx
- 2025-2026学年河北省邯郸市临漳县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省石家庄二十三中七年级(上)期末历史试卷(含答案).docx
- 2025-2026学年海南省五指山市九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省唐山市玉田县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省邢台市市区九年级(上)期末化学试卷(含答案).docx
最近下载
- 髌骨脱位康复护理新进展.pptx VIP
- 58同城加盟合同范本.docx VIP
- 急救医学-第四章心悸.ppt VIP
- 高中数学必修第四册第十一章综合测试01含答案解析.pdf VIP
- 2022年高考物理核心高频考点专题22 圆周运动的轻绳、轻杆模型(解析版).pdf VIP
- 马工程-中国古代文学史(第二版)上册第三编魏晋文学全套PPT课件50109.pptx
- 马工程-中国古代文学史(第二版)上册第二编秦汉文学全套PPT课件-50109.pptx
- 58同城同镇代理加盟流程说明.docx VIP
- 马工程-中国古代文学史(第二版)上册第一编先秦文学全套PPT课件-50109.pptx
- 58同城加盟合同范本.docx VIP
原创力文档

文档评论(0)