![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
设计模式
设计模式
Insane'
这个作者很懒,什么都没留下…
展开
-
行为型模式之备忘录模式
备忘录模式Memento备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。 实现了信息的封装,使得用户不需要关心状态的保存细节。1.场景Word编辑时断电,重新开机,恢复到编辑时状态打游戏时的存档。Windows 里的 ctri + z...原创 2019-11-05 00:01:38 · 81 阅读 · 0 评论 -
行为型模式之观察者模式
观察者模式Observer用于1:N的通知,当一个对象(目标对象Subject或Observable)状态发生改变时,他需要通知一系列对象(观察者对象Observer)使他们做出响应。通知观察者的方式:推:每次会把广播以通知的方式发生给所有观察者,观察者只能被动接收。拉:观察者可以自主决定什么时候接收通知1.场景玩CSGO时,当一个玩家的位置发生改变时,服务器会把改变后的位置数据发送给...原创 2019-11-04 23:57:25 · 773 阅读 · 0 评论 -
行为型模式之状态模式
状态模式state用于解决系统中复杂状态的转换,以及不同状态下行为的封装1.场景红绿灯,不同状态的灯有不同的行为订单,待付款,待发货,已发货,派件,不同状态有不同的行为2核心角色Context环境类,维护了一个State对象,定义并设置State的当前状态State抽象状态类ConcreteState具体状态类,封装了一个状态的行为package com.liang.st...原创 2019-11-04 23:51:33 · 126 阅读 · 0 评论 -
行为型模式之模板方法模式
模板方法template method定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现,新的子类可以在不改变一个算法的前提下重新定义该算法的特定步骤。1.场景到医院看病:其中挂号,交钱,拿药都是固定步骤,看病需要根据病情到不同的科室。2.实现子类不能调用父类,而通过父类调用子类,这些步骤已在父类中定义好,完全由父类控制整个过程。所以当实现一个算法时,整体步骤很固定,但某些...原创 2019-11-04 23:48:53 · 159 阅读 · 0 评论 -
行为型模式之策略模式
策略模式strategy在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。1.场景市场对不同的顾客采用不同的报价策略,新顾客报价策略,老顾客报价策略将这些算法策略封装成一个一个...原创 2019-11-04 23:44:23 · 114 阅读 · 0 评论 -
行为型模式之命令模式
命令模式Command请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。1.应用场景在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。2.实现定义三个角色:1、...原创 2019-11-04 23:37:18 · 82 阅读 · 0 评论 -
行为型模式之中介模式
中介模式Mediator如果一个系统中对象之间呈现网状结构,关系复杂,则可以引入一个中介者对象,由中介者和其他对象打交道。1.使用场景假设没有总经理,有三个部门,财务部,调研部,研发部。财务部要发工作,要通知调研部和研发部,调研部调研需要财务支持和研发部支持。每个部门之间都要打交道。关系非常乱。实际上,每个公司都要总经理,每个部门有什么事都报道到总经理这里,总经理在通知相关部门。这就是典型...原创 2019-11-04 23:30:54 · 94 阅读 · 0 评论 -
行为型模式之迭代器模式
迭代器模式iterator提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。又称为游标cursor模式聚合对象:储存数据迭代器:遍历对象核心角色1.Iterator(迭代器)迭代器定义访问和遍历元素的接口2.ConcreteIterator (具体迭代器),可以作为ConcreteAggregate的内部类具体迭代器实现迭代器接口对该聚合遍历时跟踪当前...原创 2019-11-04 23:23:19 · 90 阅读 · 0 评论 -
行为型模式之责任链模式
责任链模式chain of responsibility将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上对对象逐个判断是否能够处理该请求,能则处理,不能则传递给链上的下个对象职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了优点: 1、降低耦合度。它将请求的发送者和接收者解耦。...原创 2019-11-04 23:13:33 · 82 阅读 · 0 评论 -
结构型模式之享元模式FlyWeight
享元模式FlyWeight1.使用场景享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。如果有很多完全相同或部分相同的对象,我们可以通过享元模式节省内存。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。如:线程池,数据库连接池2.核心在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务...原创 2019-10-31 15:31:17 · 169 阅读 · 0 评论 -
结构型型模式之外观模式façade
外观模式façade外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。优点:1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性4、客户端不与系统耦合,外观类与系统耦 合。缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。1.迪米特...原创 2019-10-31 15:26:46 · 153 阅读 · 0 评论 -
结构型模式之装饰模式decorator
装饰模式decorator也叫包装器模式,降低系统的耦合度,可以动态的删除和添加对象的职责使具体装饰角色类独立化,可以对一个类多次装饰。代替继承,更加灵活,避免类型体系快速膨胀1.使用场景动态的为一个对象增加新的功能如:IO流输入输出设计2.核心角色抽象构件角色component:真实对象和装饰对象的接口具体构件角色(真实对象):实现抽象构件角色装饰角色:实现抽象构件角色具体...原创 2019-10-31 15:18:24 · 91 阅读 · 0 评论 -
结构型模式之组合模式composite
组合模式composite1.使用场景把部分和整体的关系用树形结构表示,从而使客户端可以使用同一的方法处理部分对象和整体对象。如:操作系统的资源管理器,XML文件解析2.组合模式核心角色抽象构建Component:定义了叶子构件器构件同特点叶子构件Leaf:无子点容器构件Composite:容器特征3.工作流程组合模式为处理树形结构提供了完美的解决方案,描述了如何将容器和叶子进...原创 2019-10-31 15:11:03 · 104 阅读 · 0 评论 -
结构型模式之桥接模式bridge
桥接模式bridge用于商城系统中商品的分类1.可以用多层继承结构实现,如:缺点:扩展性不好,不推荐使用违反单一职责原则2.使用桥接模式:扩展性强,可以修改任意一个维度/** * 品牌 * @author Administrator * */public interface Brand { void sale();}class Lenovo implements ...原创 2019-10-31 15:05:58 · 138 阅读 · 0 评论 -
结构型模式之代理模式proxy
代理模式proxy通过代理,控制对对象的访问。可以详细控制控制某个对象的方法,在这个方法前做前置处理,方法后做后置处理场景安全代理:屏蔽对真实角色的直接访问。远程代理:通过代理类处理远程方法调用延迟加载:先加载轻量级的代理对象,真正需要在加载真正对象核心角色真实角色,真正的业务逻辑代理角色,将统一的流程放到代理角色中抽象角色(定义真实角色和代理角色的公共对外方法)静态代...原创 2019-10-30 13:24:17 · 83 阅读 · 0 评论 -
结构型模式之适配器模式adapter
适配器adapter模式将一个类的接口转化成客户说需要的接口,可以使由于接口不兼容不能在一起工作而变得可以在一起工作模式中的角色:目标接口(Target)客户期待的接口,可以是接口,具体或抽象的类需要适配的类:(Adaptee)适配器(Adapter)通过包装一个需要适配的对象,把原接口转化成目标接口Adaptee.java/** * adapee * 键盘的ps2接口 *...原创 2019-10-30 13:08:41 · 130 阅读 · 0 评论 -
创建型模式之原型模式prototype
1.原型模式通过new产生一个对象需要常繁琐的数据准备或访问权限,则可以使用原型模式。就是java中的克降技术,以某个対象为原型,复制出新的对象,新的对象具备原型对象的特点优势有:效率高(直接克隆,避免重新执行构造)克隆类似于new,但是不同于new。New出的对象属性采用的是默认值。克隆出的对象的属性值完全和原型象相同。并且克隆的新对象改变不会影响原型对象。然后,再修改克隆对象的值...原创 2019-10-30 13:02:11 · 150 阅读 · 0 评论 -
创建型模式之建造者模式
建造者模式构建一个复杂的产品。分离了对象子组件的单独构造(Builder来负责,可以用工厂模式生产组件)和组装(Director来负责),可以构造出复杂的对象,实现了构造和组装的解耦。不同的构造器和不同的组装相互搭配,做出不同的对象。各个组件:Class Screen{…}class Battery{…}class Mainboard{…}public class Iphone {...原创 2019-10-29 13:34:57 · 72 阅读 · 0 评论 -
创建型模式之工厂模式
工厂模式实现的创建者和调用者的分离1.简单工厂模式也叫静态工厂模式,工程类一般使用的是静态方法,通过接收不同的参数返回不同的实例对象。要增加新产品需要修改代码(违反开闭原则)。/** * 汽车生产简单工厂 */public class CarFactory { public static Car createCar(String type) { if(type.equals("...原创 2019-10-29 13:14:08 · 56 阅读 · 0 评论 -
创建型模式之单例模式
1.单例模式保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。减少系统开销,new一个对象需要较多的资源,如读取配置文件,产生其他依赖对象,则可以在应用启动时直接产生一个单例对象,然后永久驻留内存的方式解决。1.1饿汉式:线程安全,调用效率高,不能延迟加载,资源利用率低 反射和反序列化可以破解public class SingletonDemo01 { //初始化类时加载,(没...原创 2019-10-24 17:19:30 · 95 阅读 · 0 评论 -
Object——equals方法,hashCode方法,toString方法
Object——equals方法,hashCode方法,toString方法equals()Object类中的equals方法用于检测一个对象是否等于另一个对象。hashCode()Object类中的hashCode()方法是由对象导出的一个整型数值(可以是负数)。每个对象都有一个散列码,其值为对象的存储地址。相同字符串的散列码相同。多个实例的散列码可以组合到一起使其更加均匀。toString()...翻译 2019-03-30 17:03:39 · 310 阅读 · 0 评论