设计模式
文章平均质量分 88
michael_jin92
目前在互联网公司从事Android端的开放
展开
-
设计模式之原型模式
定义:原型模式(Prototype),是一种对象创建型设计模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式的结构:原型模式要求对象实现一个可以“克隆”自身的接口,这样就可以通过复制一个实例对象本身来创建一个新的实例。这样一来,通过原型实例创建新的对象,就不再需要关心这个实例本身的类型,只要实现了克隆自身的方法,就可以通过这个方法来获取新的对象,而无须再去通过new原创 2013-05-06 15:06:30 · 899 阅读 · 0 评论 -
设计模式之解释器模式
定义:解释器模式(Interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,用这个解释器使用该表示来解释语言中句子。解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得。结构图:所涉及的角色:AbstractExpression 抽象解释器:具体的解释任务由各个实现类完成,具体的解释器分别由TerminalExpression和原创 2013-05-12 16:43:21 · 4004 阅读 · 2 评论 -
设计模式之中介者模式
定义:中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。结构图:所涉及的角色:抽象中介者Mediator:定义同事对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。中介者实现类ConcreteMediator:从抽象原创 2013-05-11 14:02:05 · 1509 阅读 · 0 评论 -
设计模式之责任链模式
定义:责任链模式(Chain of Responsibility),使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些关系对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。结构图:所涉及的角色:抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。这个角色通常由一个Ja原创 2013-05-11 13:01:11 · 1269 阅读 · 0 评论 -
设计模式之享元模式
动机:在我们面向对象设计过程中,我们常常会面临着对象实例过多的问题,如果对象实例过多这将是我们系统性能提高的一个瓶颈。假设我们要设计一个星空场景,现在我们需要实例星星对象,我们可以实例每一颗星星,但随着我们实例星星对象增多整个场景就越来越慢了,如果你实例了1000+颗星星要你去维护,这可是一个吃力不讨好的工作。我们必须找到一个合适的方法解决以上问题定义:享元模式(Flyweight),运用共享原创 2013-05-11 15:43:57 · 1134 阅读 · 0 评论 -
设计模式之命令模式
定义:命令模式(Command),将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。动机:在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对原创 2013-05-10 16:37:52 · 1005 阅读 · 0 评论 -
设计模式之桥接模式
定义:桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都能可以独立地变化。动机:在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。结构图:可以看出,这个系统含有两个等级结构,也就是:由抽象化角色原创 2013-05-10 15:30:12 · 1044 阅读 · 0 评论 -
设计模式之备忘录模式
定义:备忘录模式(Memento),属于对象的行为模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态。结构图:角色及其职责发起人Originator:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。备忘录Memento:负责存储发起人对象的内部状态,在需要的时候提供原创 2013-05-09 12:40:33 · 844 阅读 · 0 评论 -
Java23种设计模式
基本模式综述设计模式分为三种类型,共23类。创建型模式:单例模式、简单工厂、抽象工厂、工厂方法、建造者模式、原型模式。结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。按alphabeta排列简介如下。...原创 2013-05-12 19:42:47 · 1527 阅读 · 1 评论 -
设计模式之单例模式
定义:单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。让类自身负责保存它的唯一实例,这个类保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。结构图:要点:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。从具体实现角度来说,就是以下三点:一是单例模式的类只提原创 2013-05-10 14:30:43 · 868 阅读 · 0 评论 -
设计模式之迭代器模式
定义:迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。结构图:角色及其职责Iterator(迭代器):迭代器定义访问和遍历元素的接口(定义遍历元素所需要的方法,一般来说会有这么三个方法:取得第一个元素的方法first(),取得下一个元素的方法next(),判断是否遍历结束的方法isDone()(或者叫hasNext()),原创 2013-05-09 14:43:10 · 775 阅读 · 0 评论 -
设计模式之组合模式
定义:组合模式(Composite),将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。组合模式让你可以优化处理递归或分级数据结构。有许多关于分级数据结构的例子,使得组原创 2013-05-09 14:05:49 · 978 阅读 · 0 评论 -
设计模式之访问者模式
定义:访问者模式(Visitor),表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。从定义可以看出结构对象是使用访问者模式必备条件,而且这个结构对象必须存在遍历自身各个对象的方法。这便类似于Java语言当中的collection概念了。结构图:所涉及的角色:Visitor 抽象访问者角色:为该对象结构中具体元素角色声明原创 2013-05-12 17:53:57 · 1158 阅读 · 0 评论 -
设计模式之状态模式
定义:状态模式,又称状态对象模式(Pattern ofObjects for States),属于对象的行为模式,允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。状态模式主要解决的是当控制一个对象状态转换的条件表达过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。结构图:角色及其职责环境(Conte原创 2013-05-08 21:27:32 · 846 阅读 · 0 评论 -
设计模式之代理模式
定义:代理模式(Proxy),是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。类图:角色及其职责Subject:定义了R原创 2013-05-05 15:42:32 · 1392 阅读 · 1 评论 -
设计模式之适配器
定义:适配器模式(Adapter),是将一个类的接口转换成客户希望的另外一个接口,从而使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。在软件开发中,也就是系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要用于希望复用一些现有的类,但接口又与复用环境要求不一致的情况。类图:角色及其职责Target原创 2013-05-05 15:15:14 · 719 阅读 · 0 评论 -
设计模式之装饰模式
定义:装饰模式(Decorator),是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。它主要是解决:“过度地使用了继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀(多继承)。继承为类型引入的静态特质的意思原创 2013-05-04 16:09:43 · 779 阅读 · 0 评论 -
设计模式之策略模式
定义:策略模式(Strategy),它定义算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。类型:对象的行为模式类图:该模式中包含的角色及其职责环境(Context)角色:持有一个Strategy的引用。抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。具原创 2013-05-04 15:11:00 · 979 阅读 · 0 评论 -
设计模式之简单工厂
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。简单工厂模式的UML类图(见下图)简单工厂模式的实质是由一个工厂类根据原创 2013-05-03 15:48:14 · 1034 阅读 · 0 评论 -
设计模式之建造者模式
Builder模式的缘起:假设创建游戏中的一个房屋House设施,该房屋的构建由几部分组成,且各个部分富于变化。如果使用最直观的设计方法,每一个房屋部分的变化,都将导致房屋构建的重新修正.....动机(Motivation):在软件系统中,有时候面临一个"复杂对象"的创建工作,其通常由各个部分的子对象用一定算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合到一原创 2013-05-07 20:34:59 · 1022 阅读 · 0 评论 -
设计模式之工厂方法
定义:工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类实例化哪个类。工厂方法使一个类的实例化延迟到其子类。类型:创建类模式类图:工厂方法实例(计算器): 该模式中包含的角色及其职责工厂(Creator)角色工厂方法定义创建各个实例的逻辑具体工厂(Creator)角色工厂方法模式的核心,它负责实现原创 2013-05-04 14:22:02 · 881 阅读 · 0 评论 -
设计模式之外观模式
定义:外观模式(Facade),为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。解释:是一种结构型模式,它主要解决的问题是:组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。在这里我想举一个例子:比如,现在有一辆汽车,我们(客户程序)要启动它,那我们就要发动引擎(原创 2013-05-07 19:32:01 · 828 阅读 · 0 评论 -
设计模式之模板方法
定义:模板方法模式(Template Method),定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。结构图:角色及其职责(1)AbstractClass:是抽象类,其实也就是一个抽象模板,定义并实现了一个模板方法,这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽原创 2013-05-06 16:00:01 · 1018 阅读 · 0 评论 -
设计模式之抽象工厂
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。为了方便引进抽象工厂模式,引进一个新概念:产品族(Product Family)。所谓产品族,是指位于不同产品等级结构,功能相关联的产品组成的家族。如图:原创 2013-05-03 16:31:42 · 1036 阅读 · 0 评论 -
设计模式之观察者模式
定义:观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。结构图:角色及其职责原创 2013-05-08 20:34:09 · 897 阅读 · 0 评论 -
软件设计六大原则
单一职责原则:类的职责单一,不要做太多事情里氏替换原则:使用父类的地方,都用使用任意子类替换依赖倒置原则:高层模块不应该依赖底层模块,二者都应该依赖其抽象,抽象不应该依赖细节接口隔离原则:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。迪米特原则:最少知道原则,类与类之间的耦合度尽量最小开放封闭原则:对修改关闭,对扩展开放...原创 2018-11-15 17:43:49 · 381 阅读 · 0 评论