- 博客(24)
- 收藏
- 关注
原创 设计模式23-桥梁模式
桥梁模式又叫桥接模式,将抽象和实现解耦,使得两者可以独立的变化。优点:1、抽象和实现分离;2、优秀的扩充能力;3、实现细节对客户透明。使用场景:1、不希望或不适用使用继承的场景;2、接口或者抽象类不稳定的场景;3、重用性要求较高的场景。//实现化角色:他是接口或者抽象类:定义角色必须的行为和属性。public interface Implementor { public v...
2019-04-17 16:09:51
111
原创 设计模式22-享元模式
享元模式是池技术的重要实现方式,使用共享对象可有效的支持大量的细粒度的对象。两个要求:细粒度的对象和共享对象。要求细粒度对象,那么不可避免的使得对象数量多且性质相近,那我们就将这些对象的信息分为两个部分:内部状态与外部状态。内部状态:是对象可共享出来的信息,存储在享元对象内部并且不会随环境改变而改变。外部状态:是对象得以依赖的一个标记,是随环境改变而改变的、不可以共享的状态。优点和缺点...
2019-04-17 16:07:05
135
原创 设计模式21-解释器模式
解释器模式是一种按照规定语法进行解析的方案,在现在项目中使用较少。给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。优点:最显著的优点是扩展性。缺点:1、解释器模式会引起类膨胀;2、解释器模式采用递归调用方法;3、效率问题。使用场景:1、重复发生的问题可以使用解释器模式;2、一个简单语法需要解释的场景。目前在开发中运用的非常少,因为会引起...
2019-04-15 17:28:38
162
原创 设计模式20-访问者模式
访问者模式封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。优点:1、符合单一职责原则,具体元素角色负责数据的加载,而Visitor类则负责报表的展现,两个不同的职责非常明确的分离开,各自演绎变化;2、优秀的扩展性,由于职责分开,继续增加对数据的操作是非常快的;3、灵活性非常高。缺点:1、具体元素对访问者公布细节;2、具体元素变...
2019-04-15 17:26:35
116
原创 设计模式19-状态模式
状态模式当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。核心是封装,状态的变更引起了行为的变更,从外部看起来就好像这个对象对应的类发生了改变一样。优点:1、结构清晰;2、遵循设计原则,很好的体现了开闭原则和单一职责原则;3、封装性非常好。缺点:每一个状态都是一个子类,子类会太多————类膨胀。使用场景:1、行为随状态改变而改变的场景;2、条件、分支判断语句的替...
2019-04-15 17:21:37
131
原创 设计模式18-备忘录模式
备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。使用场景:1、需要保存和恢复数据的相关状态场景;2、提供一个可回滚的操作;3、需要监控的副本场景中;4、数据库连接的事务管理就是用的备忘录模式。注意事项:1、备忘录的生命期;2、备忘录的性能。访问者模式封装一些作用于某种数据结构中的各元素的操作,它可...
2019-04-15 17:17:46
134
原创 设计模式17-门面模式
门面模式也叫外观模式,要求一个子系统的外部与内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。优点:1、减少系统的相互依赖;2、提高了灵活性;3、提高了安全性。缺点:不符合开闭原则。使用场景:1、为一个负载的模块或者子系统提供一个供外界访问的接口;2、子系统相对独立————外界对子系统的访问只要黑箱操作即可;3、预防低水平人员带来的风险扩散...
2019-04-15 17:14:34
116
原创 设计模式16-观察者模式
观察者模式也叫发布订阅模式,定义为:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。优点:1、观察者和被观察者之间是抽象耦合;2、建立一套触发机制;缺点:要考虑开发效率和运行效率的问题,一个被观察者、多个观察者,消息的通知默认是顺序执行,一个观察者卡壳,会影响整体的执行效率。在这种情况下,一般采用异步的方式。使用场景:1、...
2019-04-10 17:44:48
160
原创 设计模式15-组合模式
组合模式也叫合成模式,有时候又叫部分-整体模式,主要是用来描述部分与整体的关系,其定义如下:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。优点:1、高层模块调用简单;2、节点自由增加缺点:提到树叶和树枝的时候,直接使用了实现类,与面向接口编程、依赖倒置原则相违背,它限制了接口的影响范围。使用场景:1、维护和展示部分-整体关系的场景,...
2019-04-10 17:42:12
140
原创 设计模式14-迭代器模式
迭代器模式目前是一个已经没落的模式,基本上没人会单独写一个迭代器模式。它提供一种方法访//抽象迭代器public interface Iterator { public Object next(); public boolean hasNext(); public boolean remove();}//具体迭代器public class ConcreteIterator ...
2019-04-10 17:40:25
145
原创 设计模式13-适配器模式
适配器模式将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。优点:1、适配器可以让两个没有关系的类在一起运行;2、增加了类的透明性;3、提高了类的复用度;4、灵活性非常好;使用场景:有动机修改一个已经投产中的接口时,就可以使用适配器模式注意:设计阶段不要考虑,它不是为了解决还处在开发阶段的问题,而是解决正在服役的项目问题...
2019-04-09 17:30:18
95
原创 设计模式12-策略模式
策略模式定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。优点:1、算法可以自由切换;2、避免使用多重条件判断;3、扩展性良好。缺点:1、策略类数量增多;2、所有的策略类都需要对外暴露。使用场景:1、多个类只有在算法或行为上稍有不同的场景;2、算法需要自由切换的场景;3、需要屏蔽算法规则的场景。注意事项:系统中的一个策略家族的具体策略数量超过4个,就需要考虑使用混合...
2019-04-09 17:28:01
112
原创 设计模式11-装饰设计模式
装饰设计模式动态的给一个对象增加一些额外的职责。缺点:多层的装饰是复杂的。使用场景:1、需要扩展一个类的功能,或给一个类增加附加功能;2、动态的给一个对象增加功能,这些功能可以再动态的撤销;3、需要为一批兄弟类进行改装或者加装功能,当然是首选装饰模式。//抽象构件public abstract class Component { public abstract void op...
2019-04-08 21:12:02
88
原创 设计模式10-责任链模式
责任链模式使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,知道有对象处理它为止。优点:将请求和处理分开,两者解耦,提高系统的灵活性。缺点:1、性能问题:每个请求都是从链头遍历到链尾,责任链比较长的时候,性能是一个非常大的问题。2、调试不方便,链条比较长的时候,调试逻辑比较复杂。注意:链条节点数量需要控制,避免...
2019-04-08 21:09:03
94
原创 设计模式9-命令模式
命令模式将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。三个角色:1、Receive接收者角色;2、Command命令角色;3、Invoker调用者角色。//抽象命令类public abstract class Command { public abstract void execute();}//抽象接...
2019-04-04 14:23:00
76
原创 设计模式8-中介者模式
中介者模式用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示的相互作用,从而使其耦合松散,而且可以独立的改变它们之间的交互。组成:1、Mediator抽象中介者角色:定义统一的接口,用于各同事角色之间的通信。2、ConcreteMediator具体中介者角色:具体中介者通过协调各同事角色实现协作行为,因此它必须依赖于各个同事角色。3、Colleague同事角色:每一个同事都知...
2019-04-04 14:16:49
82
原创 设计模式7-原型模式
原型模式用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。实现Cloneable接口,表示可能被拷贝,重写clone()方法表示可以被拷贝。实现接口,重写方法就完成了原型模式。浅拷贝:clone()只是拷贝本对象,对象内部的引用对象、数组等都不拷贝,基本类型和String会进行拷贝。深拷贝:将对象内部的引用,也进行拷贝。优点:1、性能优良,实在内存进行二进制流的拷贝,要...
2019-04-04 14:13:57
116
原创 设计模式6-代理模式
代理模式也叫委托模式,为其他对象提供一种代理以控制对这个对象的访问。//抽象主题类public interface Subject { public void request();}//具体主题类public class RealSubject implements Subject { @Override public void request() { //具体业务逻辑...
2019-04-02 16:48:52
76
原创 设计模式5-建造者模式
建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创造不同的表示。使用场景:1、相同的方法,不同的执行顺序,产生不同的事件结果,可以采用建造者模式;2、多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,可以使用该模式;3、产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,使用该模式非常合适。//产品类public class B...
2019-04-02 15:14:07
130
原创 设计模式4-模板方法模式
模板方法模式定义一个操作中的算法的框架,而将一些步骤延迟到子类中。优点:1、封装不变部分,扩展可变部分;2、提取公共部分代码,便于维护;3、行为由父类控制,子类实现。//抽象模板类public abstract class AbstractClass { //基本方法 public abstract void doSomething(); //基本方法 public a...
2019-04-02 14:22:45
77
原创 设计模式3-抽象工厂模式
抽象工厂模式为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。抽象工厂模式是工厂方法模式的升级版本。//抽象工厂类public abstract class AbstractCreator { public abstract AbstractProductA createProductA(); public abstract AbstractProductB ...
2019-04-02 13:58:54
100
原创 设计模式2-工厂方法模式
工厂方法模式优点:1、良好的封装性,代码结构清晰。2、屏蔽产品类,只要产品接口不变,上层模块就不需要变化。3、典型的解耦框架。//抽象产品类public abstract class Product { public void method1(){ } public abstract void method2();}//具体产品类public class Conc...
2019-04-02 10:16:48
76
原创 设计模式1-单例模式
单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。使用场景:1、生成唯一序列号的环境;2、整个项目中需要一个共享访问点或者共享数据;3、创建一个对象需要消耗的资源过多,比如访问IO和数据库等资源;4、需要定义大量的静态方法和静态常量(工具类)的环境。特征:1、私有构造;2、提供public的获取对象方法。懒汉式:public class LazyMan...
2019-04-01 16:46:42
102
原创 java程序设计六大原则
(2019年04月阅读《设计模式之禅》-秦小波,阅读后自己总结如下)六大设计原则一、单一职责原则(single responsibility principle)简称SRP原则:一个接口或者类只有一个原因引起变化,即一个接口或者类只有一个职责,负责一件事情。(此原则同样适用于方法)好处:1、复杂性降低;2、可读性提高;3、可维护性提高;4、变更风险降低二、里氏替换原则:父类能出现的...
2019-04-01 16:10:13
4798
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人