设计模式是什么? 设计模式,简单来说就前人编程总结出来的套路 为什么要学习设计模式? 改善系统的设计,增强系统的健壮性.可扩展性,为以后需求修改作铺垫 学习设计模式之前应该知道的基础知识 - 六大原则 ps:原则是死东西,实际的需求才是真的,应该做到尽量遵守原则,但又不要给原则限死 单一职责 定义:不要存在多于一个导致类变更的原因 理解:即一个类只负责一项职责,对外只提供一种功能:如一个学生类,那么它就应该只包含学生相关的属性和操作而不会包含其他身份的属性和操作 里氏替换 子类应该可以替换掉父类
状态模式 每个对象都有其对应的状态,而每个状态又对应一些相应的行为,如果某个对象有多个状态时,那么就会对应很多的行为.那么对这些状态的判断和根据状态完成的行为,就会导致多重条件语句,并且如果添加一种新的状态时,需要更改之前现有的代码.这样的设计显然违背了开闭原则,状态模式正是用来解决这样的问题的. 状态模式——允许一个对象在其内部状态改变时自动改变其行为,对象看起来就像是改变了它的类.具体的结构图如下所示: 示例代码 就以银行账户的状态来实现下状态者模式.银行账户根据余额可分为RedState.
模式的定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 模式的使用场景 相同的方法,不同的执行顺序,产生不同的事件结果时: 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时: 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式非常合适: Android源码中的模式实现 在Android源码中,我们最常用到的Builder模式就是AlertDialog.Builder, 使用该Builder来构建复杂的AlertD
单一职责原则 单一职责原则:一个类应该只有一个原因引起改变,即一个类应该只负责一个业务逻辑. 问题由来:类T负责t1, t2两个职责,当因为t1j对类T修改的时候,可能导致类T出现问题而影响职责t2. 解决方案:遵循单一职责原则,将类T进行改写,确保一个类负责一个职责. demo: 有一个类Animal,具有方法breath功能,一般的思路是这样子设计的: class Animal { public void breathe(String animal) { System.out.println
1.定义 原型模式属于一种创建型模式,与其他创建型模式不同,原型模式不是直接构造对象,而是通过复制一个已经存在的实例返回新的实例. 2.适用性 为何要拷贝而不直接生成?我的理解是有些时候直接构造实例花费比较大,比如在构造对象的时候需要做大量的数据库查询,这样如果构造许多类似的对象还重复地查询数据库则开销很大,很没效率.直接拷贝现有的实例,在需要情况下做一些小的修改会显得高效许多. 3.结构 Prototype: 声明一个克隆自身的接口 ConcretePrototype:实现一个克隆自身的操作
[GoF·第6章结论]中,介绍了设计模式的诞生与发展的历史:『建筑师Christopher Alexander第一个研究了建筑物和社区的模式,并开发了一个"模式语言"来生成它们.他的工作一次次地启发了我们』 对于不熟悉建筑行业.也不熟悉"模式语言"的大多数程序员,模式/pattern,显得比较高大上.其实,我个人更喜欢的说法是:技法!例如中国象棋中残局的解决方案或杀法. 中国象棋的隐喻 例如这样一个盘局: 问题:在当前的局面下,红方如何战胜黑方. 会下中国象棋的人肯
一.工厂模式的介绍 工厂模式让我们相到的就是工厂,那么生活中的工厂是生产产品的,在代码中的工厂是生产实例的,在直白一点就是生产实例的类,代码中我们常用new关键字,那么这个new出来的实例就就依赖与这个类,2者之间的耦合度就高,此时我们就可以使用面向对象的去解决这个问题,将变化点封装起来,这就是我们将要首先引入的简单工厂模式:先来说一个场景,比如我们吃水果这个例子吧,我们有时候想吃苹果,有时候想吃橘子,但是每次都需要去买这些水果,后来有个水果店,又卖橘子,又卖苹果,这个水果店就当于简
一.中介者模式的介绍 中介者模式第一下想到的就是中介,房子中介,婚姻中介啊等等,当然笔者也希望来个婚姻中介给我介绍一个哈哈哈,,回归正题中介者模式分成中介者类和用户类,根据接口编程的方式我们再把中介和用户类分成2个类,这样就成了抽象中介者角色,具体中介者角色.抽象同事类和具体同事类.来几个例子比如说各种游戏平台,还有我们最熟悉的QQ平台,等等这些都是中介者模式的具体应用,中介者模式常用于处理通信之间复杂有关联的业务,这样就会存在一个缺点比如说因为中介者处理了好多用户之间的关系,一但发生错
一.责任链模式的介绍 责任链模式用简单点的话来说,将责任一步一步传下去,这就是责任,想到这个我们可以相当击鼓传花,这个是为了方便记忆,另外就是我们在项目中经常用到的审批流程等这一类的场景时我们就可以考虑是否可以使用责任链模式.下面的介绍将会按照这个审批的例子写Demo: 二.责任链模式的Demo //采购请求 public class PurchaseRequest { //金额 public double Amount { get; set; }