随笔分类 -  大话设计模式

摘要:设计模式分为3个类别:创建型模式、结构型模式、行为型模式。 一、创建型模式 1、抽象工厂模式:提供一个创建一系列或相关依赖对象的接口,而无需指定它们具体的类。 抽象工厂可以解决多个类型产品得创建问题。比如:不同的数据库 ,切换数据库的时候。但是比较臃肿,利用反射加配置就可以减轻一些臃肿。 2、建造者 阅读全文
posted @ 2017-07-16 17:26 永不止步! 阅读(130) 评论(0) 推荐(0)
摘要:访问者模式(Visitor),表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 男女对比这么多的原因是因为人类在性别上就只有男人和女人两类。 如果人类的性别不止男女,而是可能有多种性别,那就意味着“状态”类中的抽象方法就不可能稳定了,每加一种 阅读全文
posted @ 2017-07-16 09:45 永不止步! 阅读(173) 评论(0) 推荐(0)
摘要:解释器模式(interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子,这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。 阅读全文
posted @ 2017-07-15 22:16 永不止步! 阅读(136) 评论(0) 推荐(0)
摘要:享元模式(Flyweight),运用共享技术有效地支持大量细粒度的对象。 在享元对象内部并且不会随环境改变而改变的共享部分,可以称为是享元对象的内部状态,而随环境改变而改变的、不可以共享的状态就是外部状态。 享元模式可以避免大量非常相似类的开销。在程序设计中,有时需要生成大量细粒度的类实例来表示数据 阅读全文
posted @ 2017-07-15 17:58 永不止步! 阅读(176) 评论(0) 推荐(0)
摘要:中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介对象使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 Mediator类 ConcreteMediator类 Colleague类 ConcreateColleagueA类 Concreate 阅读全文
posted @ 2017-07-14 07:16 永不止步! 阅读(275) 评论(0) 推荐(0)
摘要:职责链模式(Chain of Responsibility),使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 职责链的好处:客户提交一个请求时,请求是沿着链传递直至有一个职责对象负责处理它。 请求不用管 阅读全文
posted @ 2017-07-13 07:13 永不止步! 阅读(252) 评论(0) 推荐(0)
摘要:桥接模式(Bridge),将抽象部分与它的实现分离,使它们可以独立地变化。 理解:实现系统可能有多个角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。比如:手机有很多品牌,每种品牌的手机都有多个不用的游戏。 则可以分为手机品牌和手机软件,手机软件属于手机 阅读全文
posted @ 2017-07-11 22:23 永不止步! 阅读(146) 评论(0) 推荐(0)
摘要:单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。 所有类都有构造方法,不编码则系统默认生成空的构造方法,若有显示定义的构造方法,默认的构造方法就会失效。于是,只要将类的构造方法写成是private的,那么外部程序就不能用new来实例化它了。 让类自身负责保存它的 阅读全文
posted @ 2017-07-10 07:24 永不止步! 阅读(174) 评论(0) 推荐(0)
摘要:组合模式(composite),将对象组合成树形结构以表示 '部分-整体' 的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 何时使用组合模式:需求中体现部分与整体层次的结构时,以及希望用户可以忽略组合对象与单个对象的不同(整体与部分可以一致被对待),统一地使用组合结构中的所有对象 阅读全文
posted @ 2017-07-09 17:56 永不止步! 阅读(156) 评论(0) 推荐(0)
摘要:备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。 把要保存的细节给封装在了Memento 中了,哪一天要更改保存的细节也不用影响客户端了。Memento模式比较适用于功能比较复杂的,但需要维护或记录属性 阅读全文
posted @ 2017-07-09 11:10 永不止步! 阅读(186) 评论(0) 推荐(0)
摘要:适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 双方都不太容易修改的时候再使用适配器模式。 系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器器,目的是使得控制范围之外的一个原有对象与某个 阅读全文
posted @ 2017-07-04 07:17 永不止步! 阅读(164) 评论(0) 推荐(0)
摘要:状态模式(State):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。当然,如果这个状态判断很简单,那就没必要用“状态模式” 阅读全文
posted @ 2017-07-02 18:04 永不止步! 阅读(252) 评论(0) 推荐(0)
摘要:用反射技术去除Switch或者if,解除简单工厂类的判断语句带来的耦合。 用配置文件全项目替代数据库类型实现Oracle、Mysql,或者加入SqlServer等数据库实现。 优点:比抽象工厂减少耦合(Ifactory,MysqlFactory,OracleFactory变为一个ReflectSql 阅读全文
posted @ 2017-07-01 07:21 永不止步! 阅读(1000) 评论(0) 推荐(0)
摘要:抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖的接口,而无需指定它们具体的类。 涉及到多个产品系列的问题,工厂方法模式组合叫抽象工厂模式。如下图涉及到大于1个的产品,Oracle、mysql两个产品。应用的具体工厂是由两种不同的数据库实现,可以很方便的切换两个数据 阅读全文
posted @ 2017-06-29 07:19 永不止步! 阅读(188) 评论(0) 推荐(0)
摘要:观察者模式(Observer):又叫 发布-订阅 (Publish/Subscribe)模式 观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。 Subject类 ConcreteSubject 阅读全文
posted @ 2017-06-25 21:38 永不止步! 阅读(203) 评论(0) 推荐(0)
摘要:建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 如果我们用了建造者模式,那么用户就只需要指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知道了。 建造者模式:主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的 阅读全文
posted @ 2017-06-25 19:23 永不止步! 阅读(182) 评论(0) 推荐(0)
摘要:外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 何时用外观模式? 分三个阶段:首先,再设计初期阶段,应该要有意识的将不同的两个层分离,比如经典的三层架构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之 阅读全文
posted @ 2017-06-24 18:57 永不止步! 阅读(134) 评论(0) 推荐(0)
摘要:单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。 软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。其实要去判断是否应该分离出来类,也不难,那就是如果你能够想到多余一个的动机去改变一个类,那么这个类就就具有多余一个的职责,就应该考虑类的职责分离。 开放-封闭原则:是说软件实体( 阅读全文
posted @ 2017-06-23 07:21 永不止步! 阅读(154) 评论(0) 推荐(0)
摘要:模板方式模式(TemplateMethod):定义一个操作中的骨架算法,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来 阅读全文
posted @ 2017-06-22 07:00 永不止步! 阅读(125) 评论(0) 推荐(0)
摘要:原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式分为浅复制、深复制 一、浅复制 ShallowWorkExperience.java类 ShallowResume.java类 ShallowBusiness.java类 二、深复制 DeepW 阅读全文
posted @ 2017-06-21 07:11 永不止步! 阅读(150) 评论(0) 推荐(0)