设计模式
文章平均质量分 91
丶丶路遥
这个作者很懒,什么都没留下…
展开
-
设计模式-装饰模式
装饰模式的UML类图你会发现,在装饰模式中,除了对抽象接口的实现,更重要的还有对抽象接口的聚合。装饰模式一般适应于为系统已有的功能动态的添加更多的功能。使用装饰模式的一个例子装饰模式就像穿衣服,如穿衣服需要先穿内裤,再穿上衣或者裤子,或者再加个外套, 比如哪天你不想穿外套,或者在外套外再加层风衣,穿衣的方式是多样的。这里可以使用装饰者模式,...原创 2018-10-31 12:18:37 · 136 阅读 · 0 评论 -
设计模式-备忘录模式
UML类图应用场景顾名思义,在需要对某对象的属性进行备份时常使用备忘录模式,使用备忘录模式的好处在于客户端无需耦合备份类,客户端只需关心何时创建备份,何时恢复备份。代码实现被备份的对象/** * * 被备份的对象 */public class Originator { private String state; //被备份的属性 public String getStat...原创 2019-01-29 04:07:56 · 106 阅读 · 0 评论 -
设计模式-组合模式
UML类图使用场景多叉树的实现,如文件夹-文件,公司组织架构等。需要对结点有较高的抽象性能,如果结点之间属性有较多不同,则难以实现组合模式。代码实现public abstract class Component { protected String name; public Component(String name){ this.name = name; } publi...原创 2019-02-06 21:40:16 · 113 阅读 · 0 评论 -
设计模式-桥接模式
UML类图使用场景当业务在两个维度上变化,则可使用桥接模式。桥接模式将业务的抽象部分和实现部分分离。例如,如上图所示, 对于不同的图形我们希望用不同的画笔来画,我们如果将画笔直接写到图形中,如在直线类中需要添加用铅笔画和用毛笔画两种不同的方法,同样的在圆形中和在长方形中也是如此,组合后得到6个不同的类。而如果再增加一个用水彩笔画,又需要增加3个不同的方法,这样导致代码规模呈2的平方项增长。...原创 2019-02-28 00:15:08 · 114 阅读 · 0 评论 -
设计模式-迭代模式
UML类图使用场景用来遍历集合或聚合对象,通常是为了统一遍历方式。如List集合的Iterator遍历,接下来将实现一个简易版的List集合和Iterator。代码实现迭代器抽象public interface Iterator<E> { public E first(); public E next(); public boolean hasNext(); pub...原创 2019-02-19 23:38:42 · 160 阅读 · 0 评论 -
设计模式-单例模式
UML类图使用场景单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的一个类只有一个实例。即一个类只有一个对象实例。代码实现单例模式有几种实现方式。...原创 2019-02-25 18:59:37 · 117 阅读 · 0 评论 -
设计模式-命令模式
UML类图应用场景一个系统中需要经常撤销和恢复某个命令的时候,则可使用命令模式;另外,命令模式可以使得调用者和实现者解耦。如在GUI设计中,每个按钮的一个消息是一条Command。代码实现Command类,用来传递调用消息public abstract class Command { protected Receiver receiver; public Command(Recei...原创 2019-03-06 19:51:31 · 122 阅读 · 0 评论 -
设计模式-责任链模式
UML类图使用场景责任链模式类似于状态模式,当一个类或者某个方法需要做过多的逻辑处理的时候,我们不妨将其分开成多个子逻辑,同时使得每个逻辑块之间是解耦的。我们可以将其想象成一个链表,如果参数不满足第一个结点执行逻辑的条件,则执行该结点的后继结点,若参数仍然不满足后继结点执行逻辑的条件,则继续执行下一个后继结点。代码实现链结点抽象public abstract class Handler...原创 2019-03-10 11:46:38 · 193 阅读 · 0 评论 -
设计模式-中介者模式
UML类图使用场景当两个对象之间经常需要交互的时候,为了使得这两个对象不相互耦合,而设计一个中介,两个对象不需要相互知道对方,而只需要知道中介,而中介者需要知道所有交互的对象。如,Frame窗口中,各个组件进行消息交换,点击Button显示一句话到TextArea,其中Frame充当中介者。又如QQ聊天,每个用户之间不会相互依赖,而是通过中间的QQ平台进行信息交互。如上图所示,原本相互耦...原创 2019-03-11 17:18:39 · 143 阅读 · 0 评论 -
设计模式-解释器模式
UML类图使用场景命令行的解析和执行,歌谱解析,翻译软件等等。代码实现该类用来存放一些全局信息public class Context { private String input; private String output; public String getInput() { return input; } public void setInput(String i...原创 2019-03-15 19:56:58 · 113 阅读 · 0 评论 -
设计模式-享元模式
UML类图使用场景1、系统中有大量对象。 2、这些对象消耗大量内存。 3、这些对象的状态大部分可以外部化。 4、这些对象可以按照内蕴状态分为很多组,当把外蕴对象从对象中剔除出来时,每一组对象都可以用一个对象来代替。 5、系统不依赖于这些对象身份,这些对象是不可分辨的。如:池技术。String常量池,缓冲池,连接池,线程池等等。代码实现享元模式将共有的内部属性抽象出来,将不同的属性设置成...原创 2019-03-12 22:20:44 · 183 阅读 · 0 评论 -
设计模式-状态模式
UML类图应用场景状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到不同一系列类当中,可以把复杂的判断逻辑简化。简单来说,当程序中存在大量if-else if-else结果或switch结构时,且每个结构中存在大量代码时,则可使用状态模式。为了灵活控制分钟结构中的代码,有时候需要增加分支,有时候需要减少分支,并且如果将大量的代码写入到一个if-el...原创 2019-01-16 18:39:36 · 141 阅读 · 0 评论 -
设计模式-配适器模式
UML类图使用场景希望复用一些已经存在的类或方法,但这些方法不能直接转换成目标接口,所以需要增加配适器中转。如Client中耦合的是Target类,希望复用Adaptee中的方法,而Adaptee非Target的子类,因此Adaptee和Target中大量函数名可能不一样,因此无法在不修改Client中大量代码的情况下直接复用Adaptee类,所以需要增加配适器,即Target的子类Adap...原创 2019-01-18 16:45:42 · 164 阅读 · 0 评论 -
设计模式-简单工厂
未使用设计模式的计算机程序package SimpleFactoryPattern_1;import java.util.Scanner;/** * 没有使用设计模式的计算器程序 * @author Lenovo * */public class Main { public static void main(String[] args) { Scanner scan = n...原创 2018-10-24 21:08:51 · 125 阅读 · 0 评论 -
设计模式-策略模式
使用简单工厂实现一个商城消费的程序考虑到商城消费策略经常改动,所以这里通过简单工厂来生成不同的消费策略。如打0.8折的消费策略,又如满300返100的消费策略。代码结构:1、抽象出商城消费策略package simpleFactoryPattern;//抽象出收取现金的策略public interface CashSupper { public double acceptCash(...原创 2018-10-30 12:29:25 · 140 阅读 · 0 评论 -
设计模式-代理模式
代理模式的UML代理模式一般用在该对象不方便直接被其他对象访问,如安全控制,我们希望我们的对象中的某项方法不应该被其他对象直接访问,但是又要保留某些方法可以被访问,这个时候就应该使用代理模式。代理模式的实现1、将可以被代理的逻辑进行抽象interface Subject { public int getResult();}2、原有逻辑和不方便被访问的逻辑public class...原创 2018-11-04 00:24:09 · 178 阅读 · 0 评论 -
设计模式-工厂方法模式
工厂方法模式UML类图了解过简单工厂的读者会发现,工厂模式只是在简单工厂模式中将生成工厂的方法进一步抽象。如上图UML类图的例子,对于Light有BulLight和TubeLight,对应是生产工厂有BulCreator和TubeCreator。...原创 2018-11-07 21:20:13 · 142 阅读 · 0 评论 -
设计模式-外观模式
外观模式的UML类图外观模式的应用场景在以下情况下可以考虑使用外观模式:(1)设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。(2) 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。(3) 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。外观模式的实现1、各个子模块pu...原创 2018-11-13 20:03:13 · 115 阅读 · 0 评论 -
设计模式-原型模式
原型模式的UML类图原创 2018-11-12 01:07:18 · 107 阅读 · 0 评论 -
设计模式-模版模式
模板模式UML多数情况下,可以将部分逻辑进行抽象,在抽象类中定义好如何使用这些抽象方法,然后抽象方法的具体实现交给其他人实现,或者在以后实现,客户端只需要依赖抽象类,而不需要依耐具体的实现,这就可以使得在业务运行的过程中,我们可以根据业务的变换来实现不同的子类。而且这里仅需要的一步就是继承AbastractClass,重写父类中的primitive方法即可,在客户端中,只需要在配置文件中配置成...原创 2018-11-12 19:20:16 · 109 阅读 · 0 评论 -
设计模式-建造者模式
建造者模式UML类图建造者模式应用场景建造者模式更关注零件的组成顺序,它通常用来构建复杂的对象,并构建对象应独立它的装配方式时。如UML类图中的Director专门来维护构建顺序,Builder为对象的构造者,将需构建对象的各个组件独立成一个方法,Director按一定顺序构造Product。建造者模式的实现1、Product(复杂对象)import java.util.ArrayLi...原创 2018-11-16 18:20:38 · 132 阅读 · 0 评论 -
设计模式-观察者模式
UML类图使用场景对象B会随着对象A的状态的改变而改变,此时可使用观察者模式,即B作为观察者,A作为通知者,为了让通知者不耦合观察者,所以一般而言都会将观察者抽象。值得注意的是,当B随着A的状态的改变而改变时,C随着B的状态的改变而改变时,当D随着D的状态的改变而改变时,,,即这样的关系比较长时,若中间一个结点出现问题会导致后面其他结点后面的状态不能正常变化,这时一般用异步。代码实现通知...原创 2018-12-31 17:21:36 · 152 阅读 · 1 评论 -
设计模式-抽象工厂模式
UML类图使用场景有这样一种应用场景,如一套系统要给两个公式用,但是这两个公司要求的数据库不一样,一个是mysql,另一个是sqlserver,那么如何实现数据库的灵活切换,实现代码的松耦合?抽象工厂模式就是一种不错的选择。抽象工厂模式和工厂模式的区别在于工厂模式只有一种产品,抽象工厂模式有多种类型的产品。代码实现public interface UserDao { public vo...原创 2019-01-12 16:56:37 · 124 阅读 · 0 评论 -
动态代理与注解(Spring IOC、AOP核心)
介绍Spring两大核心,IOC和AOP,其中都用到了动态代理,常用于日志记录,性能统计,安全控制,事物处理,异常处理等,主要将与业务无关的逻辑从代码中抽离出来复用,实现解耦。动态代理是在静态代理的基础上产生的,博主之前介绍过静态代理模式。静态代理模式对弊端是被代理对象需要实现其公共接口以及接口的所有方法。试想若在一个系统中要给所有对象的所有方法都加上日志记录,让所有代理对象都去实现其接口是不...原创 2019-04-28 23:56:44 · 1321 阅读 · 0 评论