
OO设计模式
工匠若水
加微信:bitdev
展开
-
设计模式(创建型)之简单工厂模式(Simple Factory Pattern)
PS一句:最终还是选择优快云来整理发表这几年的知识点,该文章平行迁移到优快云。因为优快云也支持MarkDown语法了,牛逼啊!概述简单工厂模式(Simple Factory Pattern)又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。当你需要什么,只需要传入一个正确的参数,就可以原创 2015-04-27 16:35:59 · 4561 阅读 · 0 评论 -
设计模式(结构型)之外观模式(Facade Pattern)
一个客户类需要和多个业务类交互,而这些业务类经常会作为整体出现,由于涉及到的类比较多,导致使用时代码较为复杂。外观模式通过引入一个新的外观类(Facade)来实现该功能,外观类为多个业务类的调用提供统一入口,简化了类与类之间的交互。如果没有外观类,那么每个客户类需要和多个业务类之间进行复杂的交互,系统的耦合度将很大。外观模式是迪米特法则的一种具体实现,通过引入一个新的外观角色可以降低原有系统的复杂度,同时降低客户类与原创 2015-05-04 09:29:17 · 3642 阅读 · 1 评论 -
设计模式(结构型)之装饰者模式(Decorator Pattern)
装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为。装饰模式是一种用于替代继承的技术,它通过一种无须定义子类的方式来给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系。在装饰模式中引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,以扩充原有类的功能。原创 2015-04-30 17:06:20 · 8103 阅读 · 1 评论 -
设计模式(结构型)之组合模式(Composite Pattern)
组合模式又叫做部分-整体模式,使我们在树型结构的问题中模糊简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂的元素,从而使得客户程序与复杂元素的内部结构解耦。组合模式可以优化处理递归或分级数据结构。有许多关于分级数据结构的例子,使得组合模式非常有用武之地。原创 2015-04-30 15:14:14 · 3653 阅读 · 2 评论 -
设计模式(结构型)之桥接模式(Bridge Pattern)
桥接模式是一种很实用的结构型设计模式,如果软件系统中某个类存在多个独立变化的维度,通过该模式可以将这多个维度分离出来,使他们可以独立扩展,让系统更加符合“单一职责原则”。与多层继承方案不同,它将多个独立变化的维度设计为多个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系类似一条连接多个独立继承结构的桥,故名桥接模式。桥接模式用一种巧妙的方式处理多层继承存在的问题,用抽象关联取代了传统的多层继承,将类之间的原创 2015-04-29 21:15:46 · 7476 阅读 · 5 评论 -
设计模式(创建型)之原型模式(Prototype Pattern)
要理解原型原型模式必须先理解Java里的浅复制和深复制。有的地方,复制也叫做克隆。Java提供这两种克隆方式。 因为Java中的提供clone()方法来实现对象的克隆,所以Prototype模式实现一下子变得很简单。原创 2015-04-29 11:28:21 · 4626 阅读 · 2 评论 -
设计模式(结构型)之适配器模式(Adapter Pattern)
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。核心概念: 将一个接口转换成客户希望的另一个接口,使接口不兼容的。原创 2015-04-29 10:05:18 · 4608 阅读 · 3 评论 -
设计模式(创建型)之建造者模式(Builder Pattern)
建造者模式将客户端与包含多个组成部分的复杂对象的创建过程分离,客户端压根不用知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。它关注如何一步一步创建一个的复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的建造者非常方便。原创 2015-04-28 16:38:56 · 6881 阅读 · 3 评论 -
设计模式(创建型)之单例模式(Singleton Pattern)
单例模式可能是23种设计模式中最简单的。应用也非常广泛,譬如Android中的数据库访问等操作都可以运用单例模式。核心概念: 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式是一种对象创建型模式。原创 2015-04-27 16:50:05 · 3983 阅读 · 3 评论 -
设计模式(创建型)之抽象工厂模式(Abstract Factory Pattern)
PS一句:最终还是选择优快云来整理发表这几年的知识点,该文章平行迁移到优快云。因为优快云也支持MarkDown语法了,牛逼啊!概述前面介绍了工厂方法模式通过引入工厂等级结构(实现统一的工厂接口),解决了简单工厂模式中工厂类职责太重(违背单一职责原则)的问题,但是由于工厂方法模式中的每个工厂只生产一类产品(通过实现同一个工厂接口),带来的问题就是系统中会增加大量的工厂类。问题来了。。。如何解决如原创 2015-04-27 16:46:16 · 3660 阅读 · 3 评论 -
设计模式(创建型)之工厂方法模式(Factory Method Pattern)
前面介绍了简单工厂模式,在最后代码示例部分展示的程序猿技能工厂类时提到了一个严重的问题。当FactoryCreater中需要引入新对象时需要修改源代码,这违背了“开放封闭原则”,使得具体产品与工厂类之间的耦合度高,严重影响了系统的灵活性和扩展性。原创 2015-04-27 16:41:51 · 3465 阅读 · 1 评论 -
设计模式之面向对象七大基本原则
PS一句:最终还是选择优快云来整理发表这几年的知识点,该文章平行迁移到优快云。因为优快云也支持MarkDown语法了,牛逼啊!概述在运用面向对象的思想进行软件设计时,需要遵循的原则一共有7个,他们是:1. 单一职责原则(Single Responsibility Principle)每一个类应该专注于做一件事情。2. 里氏替换原则(Liskov Substitution Principle)超原创 2015-04-27 16:25:48 · 19892 阅读 · 3 评论 -
设计模式(结构型)之享元模式(Flyweight Pattern)
当一个软件系统在运行时产生的对象数量太多,将导致运行代价过高,带来系统性能下降等问题。所以需要采用一个共享来避免大量拥有相同内容对象的开销。在Java中,String类型就是使用了享元模式。String对象是final类型,对象一旦创建就不可改变。在Java中字符串常量都是存在常量池中的,Java会确保一个字符串常量在常量池中只有一个拷贝。原创 2015-05-04 14:15:58 · 5105 阅读 · 0 评论 -
设计模式(结构型)之代理模式(Proxy Pattern)
代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口。根据代理模式的使用目的不同,代理模式又可以分为多种类型,例如保护代理、远程代理、虚拟代理、缓冲代理等,它们应用于不同的场合,满足用户的不同需求。原创 2015-05-04 18:48:24 · 9868 阅读 · 0 评论 -
设计模式(行为型)之访问者模式(Visitor Pattern)
访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。访问者模式使得用户可以在不修改现有系统的情况下扩展系统的功能,为这些不同类型的元素增加新的操作。在使用访问者模式时,被访问元素通常不是单独存在的,它们存储在一个集合中,这个集合被称为“对象结构”,访问者通过遍历对象结构实现对其中存储的元素的逐个操作。原创 2015-05-06 17:11:53 · 6173 阅读 · 0 评论 -
设计模式(行为型)之解释器模式(Interpreter Pattern)
访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。访问者模式使得用户可以在不修改现有系统的情况下扩展系统的功能,为这些不同类型的元素增加新的操作。在使用访问者模式时,被访问元素通常不是单独存在的,它们存储在一个集合中,这个集合被称为“对象结构”,访问者通过遍历对象结构实现对其中存储的元素的逐个操作。原创 2015-05-06 17:11:05 · 7065 阅读 · 0 评论 -
设计模式(行为型)之备忘录模式(Memento Pattern)
备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,当前很多软件都提供了撤销(Undo)操作,其中就使用了备忘录模式。原创 2015-05-06 15:28:38 · 3611 阅读 · 0 评论 -
设计模式(行为型)之中介者模式(Mediator Pattern)
如果对象之间的联系呈现为网状结构,存在大量的多对多联系,在网状结构中,几乎每个对象都需要与其他对象发生相互作用,而这种相互作用表现为一个对象与另外一个对象的直接耦合,这将导致一个过度耦合的系统。如果在一个系统中对象之间存在多对多的相互关系,我们可以将对象之间的一些交互行为从各个对象中分离出来,并集中封装在一个中介者对象中,并由该中介者进行统一协调,这样对象之间多对多的复杂关系就转化为相对简单的一对多关系。通过引入中介原创 2015-05-06 14:46:25 · 5080 阅读 · 5 评论 -
设计模式(行为型)之职责链模式(Chain of Responsibility Pattern)
职责链可以是一条直线、一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求。链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并让请求沿着链传递,由链上的处理者对请求进行相应的处理,客户端无须关心请求的处理细节以及请求的传递,只需将请求发送到链上即可,实现请求发送者和请求处理者解耦。原创 2015-05-06 10:42:46 · 5250 阅读 · 4 评论 -
设计模式(行为型)之状态模式(State Pattern)
状态模式用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。当系统中某个对象存在多个状态,这些状态之间可以进行转换,而且对象在不同状态下行为不相同时可以使用状态模式。状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化,对于客户端而言,无须关心对象状态的转换以及对象所处的当前状态,无论对于何种状态的对象,客户端都可以一致处理。原创 2015-05-05 15:32:56 · 7949 阅读 · 0 评论 -
设计模式(行为型)之模板方法模式(Template Method Pattern)
模板方法模式是一种基于继承的代码复用,它是一种类行为型模式;是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关系。通过使用模板方法模式,可以将一些复杂流程的实现步骤封装在一系列基本方法中,在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序,而通过其子类来覆盖某些步骤,从而使得相同的算法框架可以有不同的执行结果。模板方法模式提供了一个模板方法来定义算法框架,而某些具体步骤的实现可以在原创 2015-05-05 14:36:18 · 4869 阅读 · 1 评论 -
设计模式(行为型)之命令模式(Command Pattern)
在软件开发中,我们经常需要向某些对象发送请求(调用其中的某个或某些方法),但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,此时,我们特别希望能够以一种松耦合的方式来设计软件,使得请求发送者与请求接收者能够消除彼此之间的耦合,让对象之间的调用关系更加灵活,可以灵活地指定请求接收者以及被请求的操作。命令模式为此类问题提供了一个较为完美的解决方案。命令模式可以将请求发送者和接收者完全解耦,发送者与接收者之间没有直原创 2015-05-05 11:49:27 · 4829 阅读 · 0 评论 -
设计模式(行为型)之策略模式(Strategy Pattern)
使用策略模式可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法,在这里,每一个封装算法的类我们都可以称之为一种策略(Strategy),为了保证这些策略在使用时具有一致性,一般会提供一个抽象的策略类来做规则的定义,而每种算法则对应于一个具体策略类。策略模式的主要目的是将算法的定义与使用分开,将算法的定义放在专门的策略类中,每一个策略类封装了一种实现算法,使用算法的环境类针对抽象策略类进行编程,符合“依赖原创 2015-05-05 10:10:35 · 4863 阅读 · 0 评论 -
设计模式(行为型)之迭代器模式(Iterator Pattern)
在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“ 同一种算法在多种集合对象上进行操作”提供了可能。使用面向对象技术将这种遍历机制抽象为“迭代器对象”为“应对变化中的集合对象”提供了一种优雅的方法。原创 2015-05-05 09:25:51 · 5565 阅读 · 0 评论 -
设计模式(行为型)之观察者模式(Observer Pattern)
观察者模式用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间可以没有任何相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展。一个软件系统常常要求在某一个对象的状态发生变化的时候,某些其他的对象做出相应的改变。做到这一点的设计方案有很多,但是为原创 2015-05-04 20:46:46 · 11948 阅读 · 2 评论 -
设计模式之面向对象与类基础特征概念
PS一句:最终还是选择优快云来整理发表这几年的知识点,该文章平行迁移到优快云。因为优快云也支持MarkDown语法了,牛逼啊!背景知识设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模原创 2015-04-27 16:19:27 · 4668 阅读 · 0 评论