模式,是为了需求变动而产生,抛开需求谈模式,显得很苍白。
模式,没有完美的模式,它只适应于特别的场合。封装变化点,是最重要的
原则,个人认为封装变化点与解耦有紧密的联系,解耦常用的最基本的技术
手段(仅限于面向对象这个范围,抛弃IOC,否则对讨论设计模式没帮助),
横穿于23种设计模式。
工厂模式:应用场所是------创建对象的方法相同,但创建具体的对象会经常变化。
换句话说:我的代码中许多地方都要产生一个新的对象,而这个创新的对象在未
来一段时间内,有可能会经常变化。当这个对象真的要变了时,我如何用最少的代价修
改我的代码呢?因此,有必要把"创新对象"进行解耦。尽可能的,我只改一两处,就实现
了所有代码的修改。如何实现呢? 凡是要生成新对象的代码,都统一用个类的方法产
实例,如果对象要变时,修改这个类就行了。
举个例子:
我有一个游戏,需要在多个地方产生鸡这个实例,假定鸡这个类名为:Chicken ,
这样我的代码将多处出现:
Chicken ck1 =new Chicken ();
..........
Chicken ck2 =new Chicken ();
..........
..........
Chicken ckn =new Chicken ();
..........
假设有一天:需要把鸡,改成dog,不是一下就要改n处吗?如果这个n很大,是不是工作
量大,且容易出错呢?也就是说现在,我的生成的对象与我的代码紧密的耦合在一起
了。需要解耦。仔细观察 ,我们要创建对象这个是不变的,而具体要创建的对象在变化
了。这就是说,在这里产生了变化点。按设计模式原则:要在这个生成对象的地方,要
封装起来。好了,我们由统一的方法产生。假定完成这个工作的类叫Factory,在这个工
厂中传入我们要生成的实例参数,然后由 createInstance.产生。其次,通常情况下,
需要为所有要变化的类抽象出公共基类,在这里假定为Animal。这个类,可以如下表
示(仅是举个例子,具体语法之类的,请自行调试。不足之处,请谅解):
class Factory {
private Animal ani;
public Factory ();
public static setAnimal(Animal ani){
this.ani=ani;
}
public static Animal createInstance(){
return ani;
}
}
我的代码相应变动:
首次如下使用,把Factory 的fac对象弄成全局变量。
Factory fac=new Factory ();
Animal ani=new Chicken();
fac.setAnimal( ani);
其他要产生新的对象,都这样写:
Animal ani1=fac. createInstance();
-----------------------------------
Animal ani2=fac. createInstance();
----------------------------------
Animal ani3=fac. createInstance();
如果我要dog,该怎么办呢?
仅需在fac首次使用的地方改成:
Factory fac=new Factory ();
Animal ani=new Dog();
fac.setAnimal( ani);
------------------
说明:如果 用泛型或类反射,可直接去掉更多的设置,可以连chicken与dog共有的
父类 Animal 去掉。这里仅仅是说明工厂模式应用的场景。至于工厂模式如何应用,实
现,可以参考相关教材。望网友见谅。(如果单例模式结合工厂模式,则可以免去
设全局变量的麻烦。凡是全局变是,在多线程 情况下,要注意线程安全。
----------有点画蛇添足了!)
最后,说明3点:
1 如果我要创建工厂的这个Factory在实际需求中,也会不断的变,怎么办?怎么解
耦?怎么找出变化点?怎么封装变化点?于是有了,抽象工厂。抽象 工厂与其他模式,
我不想参于讨论了。望本回复能起抛砖引玉的作用。
2 设计械式的理解与掌握,不在于23种模式中各个类之间的关系 理清,更不在于具体的
语言(只有是面向对象的语言都可以),而在于23种模式面临的需求场景。要从发现需求变动,
准确找到变化点,如何封装它的角度去研究,去学习,
而不要拘泥于具体的形式。换句说话:在23种设计模式的需求中,要准确
找出哪些地方是强耦合,并且由于实际需要,要对这些耦合进行解耦。23种模式中,用
了哪些最基本的技术手段进行解耦了呢? (据我的观察体会,大约有5种,最常见的方
法是,把一个类的对象,注入另一个类中,然后调用这个对象的方法。)
3 与其他网友的观点一样,要在实践中不断学习与领悟。书与实践相结合。
本回贴 ,仅是个人观点,不足之处,望众网友见谅!本回复,仅是抛砖引玉。如果认为
有参考价值,就参考一下;如果狗屁不通,就付诸一笑;如果观点性错误,请给其他网友
指出来,误已可以,不想误人!再次谢谢各网友了!
分享到:
相关推荐
这篇名为“浅淡我国保险营销模式创新”的论文,着重探讨了中国保险业在市场营销策略上的变革与发展。在当今快速变化的市场环境中,保险公司的营销模式面临着新的挑战和机遇,需要不断创新以适应消费者需求的变化和...
浅淡如何增强消防安全管理工作-安全管理-行业安全-消防安全.docx
1. 高生产效率:WK-20挖掘机配备有较大功率的发动机和优化设计的液压系统,使得其作业效率较高。 2. 强大的挖掘能力:该设备通常具有较大的挖掘半径和挖掘深度,能够适应各种复杂的挖掘条件。 3. 可靠的性能:经过...
浅淡班级的民主化管理模式.doc
直流控制系统协调并控制所有系统间的工作,接收来自接口系统的数据,驱动激光扫描单元,管理电源分配,提供过压/欠流保护,并进入节能模式。该系统包含复杂的电路设计,如放大电路、反馈电路和整流电路,是维修的...
浅淡中国新能源汽车发展之路.pdf
浅淡测试自动化,用IE打开。
- **动态绑定**:运行时动态生成服务代理,可以根据URL动态获取WSDL并创建服务引用,适用于服务地址可能变化的场景。 - **WS-I兼容性**:为了确保跨平台的互操作性,开发Webservice时应遵循WS-I(Web Services ...
随着时代的发展,教育模式也在不断进行着深刻的变革。尤其在历史教学领域,传统的以教师为中心的模式已经不能满足现代教育的需求。现代教育理念强调学生主体性的发挥、自主学习能力的培养以及创新思维的激发,这对...
蓝桥杯是中国计算机学会主办的全国性计算机程序设计竞赛,考试内容涵盖算法、数据结构、计算机网络、数据库、操作系统等多个领域。了解考试内容和格式可以帮助你更好地备战考试。其次,学习基础知识。蓝桥杯考试的...
【标题】:“浅淡施工企业税务筹划” 【描述】:“探讨建筑施工企业的税务规划策略,以减轻税负,提升经济效益。” 【标签】:“精品文档” 【部分内容】:本文旨在阐述施工企业如何通过税收筹划来优化税务策略,...
浅淡食品安全论文.doc
总体而言,菩提岛依靠其丰富的旅游资源,通过精心规划和持续创新,已经形成了具有自己特色的旅游经济发展模式。未来,通过解决现有的问题并不断提升旅游服务质量,菩提岛有望成为更受欢迎的国际旅游目的地。
移动Web开发是针对移动设备,如智能手机和平板电脑进行网页设计和开发的领域。随着互联网技术的发展,移动设备用户数量激增,使得移动Web开发变得至关重要。本篇将深入探讨移动Web开发中的关键技术点。 首先,`...
【施工企业税务筹划】 施工企业的税务筹划是企业管理中的重要环节,旨在通过合法合规的方式减轻企业的税收负担,提高经济效益。在建筑行业中,税务筹划不仅有助于企业在遵守法律的基础上优化财务结构,还能提升企业...
4. 观察结果:等待规定的时间(通常15-20分钟),根据检测线和控制线的颜色变化判断结果。 三、结果解读 - 阳性结果:如果检测线上无色或颜色浅淡,而控制线呈明显色带,说明样本中含有布鲁氏菌抗原。 - 阴性结果...
浅淡食品安全毕业论文.doc
教育资料
浅淡网络时代的信息安全.docx