设计模式
设计模式
奶茶37.2℃
海纳百川有容乃大
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式之解释器
一.简介二.实现三.总结原创 2020-07-18 20:36:11 · 230 阅读 · 0 评论 -
设计模式之责任链
一.简介生活中常有一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等。责任链(Chain of Responsibility)模式:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。模式结构:1.抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。2.具体处理者(C原创 2020-07-17 23:28:53 · 223 阅读 · 0 评论 -
设计模式之策略
一.简介软件开发中常常遇到实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。策略(Strategy)模式:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式的优点:1.多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句。2.策略模式提供了一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而避免重复的代码。3.策略模式把易变化的代码抽离出来,变化部分原创 2020-07-17 21:21:07 · 262 阅读 · 0 评论 -
设计模式之状态
一.简介程序设计中有些对象是有状态的对象。当有状态的对象与外部事件产生互动时,其内部状态会发生改变,从而使得其行为也随之发生改变。传统的处理方法是采用if-else 语句判断处理多种状态,状态模式的思想是:把“判断逻辑”提取出来,放到一系列的状态类当中,状态对象在其内部状态发生改变时改变其行为。模式结构:1.环境(Context)角色:它定义了客户感兴趣的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理。2.抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态原创 2020-07-17 16:28:30 · 280 阅读 · 0 评论 -
设计模式之备忘录
一.简介备忘录模式能记录一个对象的内部状态,当用户后悔时能撤销当前操作,使数据恢复到它原先的状态。该模式又叫快照模式。模式结构:1.发起人(Originator)角色:记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。2.备忘录(Memento)角色:负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。3.管理者(Caretaker)角色:对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问与修改。原创 2020-07-15 19:25:25 · 204 阅读 · 0 评论 -
设计模式之中介者
一.简介现实生活中常有许多对象存在复杂的交互关系,这种关系常是“网状结构”,把这种“网状结构”改为“星形结构”的话,将大大降低它们之间的“耦合性”,这时只要添加一个“中介者”就可以了。中介者(Mediator)模式:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式。模式结构:1.抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。2.具体中介者(ConcreteMediat原创 2020-07-15 16:33:20 · 275 阅读 · 0 评论 -
设计模式之观察者
一.简介观察者(Observer)模式:多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式。模式结构:1.抽象主题(Subject)角色:也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及通知所有观察者的抽象方法。2.具体主题(Concrete Subject)角色:也叫具体目标类,它实现抽象目标中的通知方法,当具体主题的内部状态发生改变时,通知所有注册过的原创 2020-07-15 13:41:31 · 195 阅读 · 0 评论 -
设计模式之迭代器
一.简介迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部状态结构。模式结构:1.抽象聚合(Aggregate)角色:定义存储、添加、删除聚合对象以及创建迭代器对象的接口。2.具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。3.抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、first()、next() 等方法。4.具体迭代器(Concretelt原创 2020-07-15 10:30:14 · 246 阅读 · 0 评论 -
设计模式之访问者
一.简介每种元素存在多种不同的访问者或处理方式(如消费者对同一产品的使用体验是不一样的)。被处理的元素结构相对稳定而有多种访问方式,如果用“访问者模式”来处理比较方便。访问者模式能把处理方法从数据结构中分离出来,并可以根据需要增加新的处理方法,且不用修改原来的程序代码与数据结构,这提高了程序的扩展性和灵活性。访问者(Visitor)模式:将作用于各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。模式结构:1.抽象原创 2020-07-14 21:52:24 · 239 阅读 · 0 评论 -
设计模式之命令
一.简介命令(Command)模式将“方法的请求者”与“方法的实现者”分离。两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。命令模式的结构:1.抽象命令类(Command):声明执行命令的接口,拥有执行命令的抽象方法。2.具体命令角色(Concrete Command):是抽象命令类的具体实现类,它拥有接收者对象,并通过调用接收者的功能来完成命令要执行的操作。3.实现者/接收者(Receiver):执行命令功能的相关操作,是具体命令对象业务的真正实现者。4原创 2020-07-14 16:49:26 · 266 阅读 · 0 评论 -
设计模式之模板方法
一.简介系统开发过程中可能知道了算法所需的执行步骤,但具体实现细节需要实现类中才能确定。可采用模板方法模式解决这类问题。模板方法(Template Method)模式:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤模板方法模式结构:1.抽象类(Abstract Class):负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。基本方法:是整个算法中原创 2020-07-14 09:35:28 · 311 阅读 · 0 评论 -
设计模式之代理
一.简介二.实现三.总结原创 2020-07-13 17:58:45 · 190 阅读 · 0 评论 -
设计模式之享元
一.简介程序设计过程中有时会创建大量相同或相似对象实例的问题,把它们相同的部分提取出来共享,则能节省大量的系统资源。享元(Flyweight)模式:运用共享技术来有効地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。享元模式状态1.内部状态:不会随着环境的改变而改变的可共享部分;2.外部状态:随环境改变而改变的不可以共享的部分。享元模式的实现要区分应用中的这两种状态,并将外部状态外部化。享元模式的结构1.抽象享元原创 2020-07-13 15:21:59 · 211 阅读 · 0 评论 -
设计模式之外观
一.简介外观(Facade)模式:是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问。外观(Facade)模式主要定义了一个高层接口,包含了对各个子系统的引用,通过它访问各个子系统的功能。与计算机领域一位大神说的:“Any problem in computer science can be solved by another layer of indirection”(计算机科学领域的任何问题都可以通过增加一个中间层来解决”) 如出一辙。模式结构:1.外观(Facade)原创 2020-07-12 23:04:20 · 271 阅读 · 0 评论 -
设计模式之组合
一.简介组合(Composite)模式:又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。模式结构:1.抽象构件(Component):它的主要作用是为树叶构件和树枝构件声明公共接口,并实现它们的默认行为。2.树叶构件(Leaf):是组合中的叶节点对象,它没有子节点,用于实现抽象构件角色中 声明的公共接口。3.树枝构件(Composite):是组合中的分支节点对象,它有子节点。它实现了抽象构件角色中声明的接口,原创 2020-07-12 21:04:32 · 205 阅读 · 0 评论 -
设计模式之装饰
一.简介装饰(Decorator)模式在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能) 。模式的结构1.抽象构件(Component):抽象接口以规范准备接收附加责任的对象。2.具体构件(Concrete Component):实现抽象构件,通过装饰角色为其添加一些职责。3.抽象装饰(Decorator):继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。4.具体装饰(ConcreteDecorator):实现抽象装饰的相关方法,并给具体构件原创 2020-07-12 17:22:16 · 200 阅读 · 0 评论 -
设计模式之桥接
一.简介当对象有多个维度的变化时,如图形有形状、颜色等。不同颜色(m种)、形状(n种)的组合类将有m x n 种。类的爆炸增长对于开发和维护带来巨大困难。桥接模式(Bridge) 用组合关系代替继承关系来实现。桥接模式结构1.抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。2.扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。3.实现化(Implementor)角色/原创 2020-07-12 15:38:06 · 247 阅读 · 0 评论 -
设计模式之适配器
一.简介生活中出现2个对象接口不兼容不能一起工作时,需要地3着进行适配。如手机充电器适配家用220V电源和手机充电5V接口。适配器模式(Adapter)将一个类的接口转换成另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,使用相对较少。适配器模式(Adapter)结构:1.目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。2.适配者(Adaptee)类:它是被访问和适配的现存组原创 2020-07-12 13:37:54 · 324 阅读 · 0 评论 -
设计模式之建造者(builder)
一.简介一个复杂的对象通常有一系列创建步骤,如汽车组装:车架、发动机、方向盘、轮胎等。建造者模式可以很好处理需要多个创建步骤的对象创建,建造者模式将一个复杂的对象分解为多个简单的对象,再逐步构建。建造者模式注重部件的组装过程。建造者(Builder)模式由产品、抽象建造者、具体建造者、指挥者等 4 个要素构成。1.产品角色(Product):包含多个组成部件的复杂对象,由具体建造者来创建其各个部件。2.抽象建造者(Builder):包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品原创 2020-07-10 23:17:16 · 334 阅读 · 0 评论 -
设计模式之原型
一.简介系统中可能存在大量相同或相似的对象,使用构造函数创建对象将非常繁琐与低效,采用原型模式生成对象将更高效。原型模式(Prototype Pattern):用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象实现方式:1.原型模式的克隆分为浅克隆和深克隆,大部分编程语言都支持克隆方式2.序列化方式实现对象克隆二.实现1.java 实现Cloneable接口重写clone 方法2.java实现Serializable 接口方式序列化三.总结1.对于原型模式原创 2020-07-10 19:43:41 · 261 阅读 · 0 评论 -
设计模式之抽象工厂
一.简介工厂方法模式中只考虑一类产品的生产,抽象工厂模式是工厂方法模式的升级,用于生产一系列相互关联或相互依赖的产品。抽象工厂模式结构:抽象工厂(Abstract Factory):提供了创建多种产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品。具体工厂(ConcreteFactory):实现抽象工厂中的抽象方法,完成具体产品的创建。抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。具体产品(ConcreteProduct):实现抽象产品角色所定义的接口,由具体工原创 2020-07-10 15:51:46 · 280 阅读 · 0 评论 -
设计模式之工厂方法
一.简介工厂方法模式由抽象工厂、具体工厂、抽象产品和具体产品构成。工厂方法模式结构:抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品。具体工厂(ConcreteFactory):实现抽象工厂中的抽象方法,完成具体产品的创建。抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。具体产品(ConcreteProduct):实现抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。二.实现pack原创 2020-07-10 15:10:26 · 256 阅读 · 0 评论 -
设计模式之单例
一.简介单例模式使类的一个对象成为系统中的唯一实例。二.实现1.饿汉式package com.vincent;class Singleton{ private static final Singleton instance = new Singleton(); private Singleton(){ } public static Singleton getInstance(){ return instance; }}2.原创 2020-07-09 14:31:43 · 316 阅读 · 0 评论 -
设计模式概要
一.简介设计模式(design pattern)是对面向对象设计中反复出现的问题的解决方案。这个术语是在1990年代由Erich Gamma等人从建筑设计领域引入到计算机科学中来的。设计模式让代码更容易被他人理解、保证代码可靠性、程序的重用性、程序的扩展性。...原创 2020-07-04 18:56:00 · 424 阅读 · 0 评论
分享