引言从三个实例说起……初始设计方案**问题**1.采用了多层继承结构,导致系统中类的个数急剧增加,具体层的类的个数=所支持的图像文件格式数×所支持的操作系统数2.系统扩展麻烦,无论是增加新的图像文件格式还是增加新的操作系统,都需要增加大量的具体类,这将导致系统变得非常庞大,增加运行和维护开销**实例二:不够灵活的影院售票系统**publicclassMovieTicket**问题***(1)MovieTicket类的calculate()方法非常庞大,它包含各种打折算法的实现代码,在代码中出现了较长的条件转移语句,不利于测试和维护*(2)在增加新的打折算法或者对原有打折算法进行修改时必须修改MovieTicket类的源代码,系统的灵活性和可扩展性较差*(3)算法的复用性差,如果另一个系统需要重用某些打折算法,只能通过对源代码进行复制粘贴来重用,无法单独重用其中的某个或某些算法某软件公司在开发一个银行业务处理系统时需要对其中的机密数据进行加密处理,通过分析发现,用于加密的程序已经存在于一个第三方算法库中,但是没有该算法库的源代码。

所以,在运用迪米特法则时要注意以下6点。

但是,过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块之间的通信效率降低。

\\.为设计提供共用的词汇,每个模式名就是一个设计词汇,其概念使得程序员间的交流更加方便。

由于文中部分模式并未配图,你可以在这里查看我在网络上收集的完整23种bbin宝盈集团平台首页UML类图。

【就最后一句很赞同】********个人感悟****学习bbin宝盈集团平台首页确实有几种境界:第一种是学习了一两个bbin宝盈集团平台首页,就一直想用到自己的代码中去;第二种是学完全部bbin宝盈集团平台首页,觉得很多模式都很相似,分不清楚它们之间有什么区别;第三种是灵活运用bbin宝盈集团平台首页,就算不用具体哪种模式也可以设计也高质量的代码,无剑胜有剑。

****结构型模式:把类或对象结合在一起形成一个更大的结构。

**他山之石:**bbin宝盈集团平台首页总结:http://blog.csdn.net/xtwolf008/article/details/8807006bbin宝盈集团平台首页专题:http://zzk.cnblogs.com/s?w=blog%3Ajava-my-life+Java%E4%B8%8E%E6%A8%A1%E5%BC%8F&t=如有错误请指正:)如要引用请指明出处:http://www.cnblogs.com/wxisme/p/4693094.html,长文预警,可以先收藏再看~**或者可以按照以下bbin宝盈集团平台首页分篇阅读:**5种构建型模式:7种结构型模式:**11种行为型模式(按顺序阅读):*****以下是原回答:bbin宝盈集团平台首页在程序员的面试中会被考到,通常是介绍其原理并说出优缺点。

即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。

*好像挺难理解的,查找了一些资料。

状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。

里氏代换原则是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受影响时,基类才能被真正复用,而衍生类也能够在积累的基础上增加新的行为,里氏代换原则是对开-闭原则的补充。

结果是除了Singleton模式以外的其他模式都没有找到应用的场所。

命令模式:命令模式把一个请求或者操作封装到一个对象中。

在程序需要进行拓展的时候,不能去修改原有的代码,而是扩展原有代码,实现一个热插拔的效果。

通过这种方式去除对象之间的耦合。

我过生日,你要送我一件礼物。

**相识**意味着一个对象仅仅知道另一个对象的类型。

迪米特法则【LOWOFDEMETER】:高内聚低耦合–highcohesionlowcoupling6、开闭原则【OPENCLOSEPRINCIPLE】:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

这里例子简单,可能并不明显,但是真实项目中必然会有更多的条件分支和更多类似`Turn()`的方法,这会导致整个项目扩展维护起来极其困难,因为,它严重违背了**开闭原则**。

提供全局访问点。

|*MVC模式(MVCPattern)*业务代表模式(BusinessDelegatePattern)*组合实体模式(CompositeEntityPattern)*数据访问对象模式(DataAccessObjectPattern)*前端控制器模式(FrontControllerPattern)*拦截过滤器模式(InterceptingFilterPattern)*服务定位器模式(ServiceLocatorPattern)*传输对象模式(TransferObjectPattern)bbin宝盈集团平台首页的六大原则**1、开闭原则(OpenClosePrinciple)**开闭原则的意思是:**对扩展开放,对修改关闭**。

从交通灯例子可以看到,**事件(event)**就是`TrafficLight`中的`Turn()`方法,由客户端触发,触发后,系统会判断当前处于哪种灯的状态,然后执行相应的动作,完成之后再设置下一种灯状态,和有限状态机的工作原理完美对应上了。

接口分离的手段主要有以下两种:1.委托分离,通过增加一个新的类型来委托客户的请求,隔离客户和接口的直接依赖,但会增加系统开销。

比如,乘车人和车票之间就是一种关联关系,学生和学校就是一种关联关系,关联关系默认不强调方向,表示对象间相互知道。

简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以高内聚方面做的并不好。

某些情况下,客户不想或者不能够直接引用一个对象,代理对象可以在客户和目标对象直接起到中介的作用。

**适用性***一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。

FactoryMethod(工厂模式):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。