设计模式
文章平均质量分 87
java设计模式
敲代码的小小酥
上天,请赐予我平静,去接受我无法改变的;给予我勇气,去改变我能改变的;赐我智慧,分辨两者的区别
展开
-
设计模式之简单工厂模式(Simple Factory Pattern)
一、简单工厂模式的由来所有设计模式都是为解决某类问题而产生的,那么简单工厂模式是为解决什么问题呢?我们假设有以下业务场景:在一个学生选课系统中,文科生用户选课时,我们要获得文科生的所有课程列表;理科生用户选课时,获得理科生的所有课程列表;体育生用户选课时,获得体育生的所有课程列表;那我们的逻辑怎么写呢?很简单,我们用伪代码实现如下:if(userType is 文科生){ return 文科生课程;}else if(userType is 理科生){ return 理科生课程;原创 2021-03-19 14:08:15 · 593 阅读 · 0 评论 -
设计模式之工厂方法模式(Factory Method Pattern)
一、工厂方法模式的诞生在读这篇文章之前,我先推荐大家读《设计模式之简单工厂模式(Simple Factory Pattern)》这篇文档。工厂方法模式是针对简单工厂模式中违反开闭原则的不足,而提出的改进方案。在简单工厂模式中,每增加一个新产品,就要修改工厂类的调度方法, 针对这个问题,工厂方法模式提出,工厂类提取成抽象的类或接口,定义调度规范。每新增一种产品,不仅要提供产品的实现类,还要提供调度这种产品的工厂类。这样,用户在用工厂方法模式时,需要哪个产品,就调用哪个产品的工厂类,即可获得。就不用只通过一个原创 2021-03-21 21:03:33 · 234 阅读 · 0 评论 -
设计模式之抽象工厂模式(Abstract Factory Pattern)
一、抽象工厂模式的由来 抽象工厂模式,最开始是为了解决操作系统按钮和窗体风格,而产生的一种设计模式。例如:在windows系统中,我们要用windows设定的按钮和窗体,当我们切换Linux系统时,要把按钮和窗体统一切换成Linux风格的。如何统一进行调换呢?于是就有人设计出了,windows是一个工厂,生产windows的窗体和按钮,Linux是一个工厂,生产Linux的窗体和按钮,通过切换工厂,来整体切换按钮和窗体风格。看了上面的描述,是不是感觉说了一堆废话呢?????其实抽象工厂模式是从工厂方法原创 2021-03-21 20:56:19 · 286 阅读 · 0 评论 -
设计模式之单例模式(Singleton Pattern)
一、定义一个类只有一个实例,且该类能自行创建这个实例的一种模式。二、单例模式举例例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。在计算机系统中,还有 Windows 的回收站、操作系统中的文件系统、多线程中的线程池、显卡的驱动程序对象、打印机的后台处理服务、应用程序的日志对象、数据库的连接池、网站的计数器、Web 应用的配置对象、应用程序中的对话框、系统中的缓存等常常被设计成单例。J2EE 标准中的S原创 2021-03-21 21:12:07 · 166 阅读 · 0 评论 -
设计模式之建造者模式(BuilderPattern)
一.意义将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。说明:复杂对象的构建,比如一个对象有几十个成员属性,那么我们在创建这个对象,并给成员属性赋值时,就会很麻烦。采用建造者模式,就是把创建对象并给成员属性赋值的工作,分离出来,由建造者角色来完成,业务程序员直接调用导演类,获得复杂对象即可,无需再进行对象的创建工作了。二.角色建造者模式涉及到一下几种角色:Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,在该接口中一般声明两类方原创 2021-03-22 13:23:17 · 187 阅读 · 0 评论 -
设计模式之适配器模式(Adapter Pattern)
一、概念将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。解释:官方概念比较晦涩难懂,用通俗易懂的话说就是,我们需要实现一个接口或者抽象方法,但是在实现类中,我们需要一个第三方类的方法来实现接口方法,我们会怎么办呢?一种方法就是将实现类继承第三方类,来调用第三方方法,另一种方法就是在实现类中定义第三方类的成员属性,然后通过成员属性调用第三方方法。这波操作,就是适配器模式。通过继承调原创 2021-03-22 13:49:08 · 179 阅读 · 0 评论 -
设计模式之组合模式(Composite Pattern)
1.概念又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。树形结构不论在生活中或者是开发中都是一种非常常见的结构,一个容器对象(如文件夹)下可以存放多种不同的叶子对象或者容器对象,容器对象与叶子对象之间属性差别可能非常大。由于容器对象和叶子对象在功能上的区别,在使用这些对象的代码中必须有区别地对待容器对象和叶子对象,而实际上大多数情况下我们希望一致地处理它们,因为对于这些对原创 2021-03-19 15:06:52 · 122 阅读 · 0 评论 -
设计模式之桥接模式(Bridge Pattern)
1.概念桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。理解这里,我们用一个例子,来说明抽象化和实例化解耦的意思。我们需要不同的形状,如圆形,三角形,长方形,正方形等等。每个形状,我们还需要多种颜色,如红色圆形,黑色圆形,灰色圆形,红、黑、灰三角形。。。。。。下面我们看两种实原创 2021-03-19 13:34:37 · 335 阅读 · 3 评论 -
设计模式之装饰者模式(Decorator Pattern)
1.概念装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。理解装饰器模式就是对现有的类和方法进行加强的一种方法和手段。其主要特征就是装饰者类实现或继承一个接口或抽象类,然后,在装饰者类中,又定义一个实现或继承抽象元素的成员属性。一般这种结构的,都是采用装饰者设计模式。继承或实现抽象元素,是原创 2021-03-19 18:14:42 · 190 阅读 · 0 评论 -
设计模式之享元模式(Flyweight Pattern)
1.概念运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种 对象结构型模式。在享元模式中可以共享的相同内容称为 内部状态(Intrinsic State),而那些需要外部环境来设置的不能共享的内容称为 外部状态(Extrinsic State),其中外部状态和内部状态是相互独立的,外部状态的变化不会引起内部状态的变化。由于区分了内部状态和外部状态,原创 2021-03-21 20:48:24 · 107 阅读 · 0 评论 -
设计模式之代理模式(Proxy Pattern)
1.概念为其他对象提供一种代理,以控制对这个对象的访问。代理对象起到中介作用,可去掉功能或者增加额外功能。2.角色抽象主题角色(Subject):声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。具体主题角色(RealSubject):也称为委托角色或者被代理角色。定义了代理对象所代表的目标对象。代理主题角色(Proxy):也叫委托类、代理类。代理对象内部含有目标对象的引用,从而可以在任何时候操作目标对象;代理对象提供一个与目标对象相同的接口,以便可以原创 2021-03-24 14:20:52 · 237 阅读 · 1 评论 -
设计模式之责任链模式(Chain of Responsibility Pattern)
1.概念为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,所以责任链将请求的发送者和请求的处理者解耦了。这里解耦的意思是,我们在一般的处理里,是根据请求,去选择处理的对象,例如:请求A,通过逻辑判断,选择B对象去处理,请求C,通过逻辑判断,选择D对象处理。这样做,就是把请求的判断和处理,写原创 2021-03-24 16:49:04 · 130 阅读 · 0 评论 -
设计模式之命令模式(Command Pattern)
1.概念将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。理解:在行为设计模式中,目的是设计对象之间的相互交互和协作,以此来提高系统的扩展性和可维护性。所有,在命令模式中,就是把对象划分成了请求发出者、请求执行者和命令三种类型,通过这三种类型的对象相互交互,来完成业务。这么设计的好处就是对象之间各司其职,相互协作,在可维护性和解耦合方面,得到了提高。2.角色抽象命令类(Command)角色:声原创 2021-03-28 16:28:05 · 103 阅读 · 0 评论 -
设计模式之观察者模式(Observer Pattern)
1.概念定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式是一种对象行为型模式。观察者模式包含观察目标和观察者两类对象,一个目标可以有任意数目的与之相依赖的观察者,一旦观察目标的状态发生改变,所有的观察者都将得到通知。在java中,已经实现了观察者模式,我们可以直接使用java的类库实现观察者模式。java的Observer类库和ObjectEvent类库都是观察者模式的实现,我们以这两个为例,进行讲解。2.Observer类库讲解原创 2021-04-04 15:41:23 · 289 阅读 · 2 评论 -
设计模式之访问者模式(Visitor Pattern)
1.代码实现我们先上代码,通过代码,来理解访问者模式。业务:一个班级里,有学生。对于校长而言,要统计学生的数量;对于老师而言,关注学生的成绩。我们先定义学生类:public class Student { private String score;//成绩 public Student(String score){ this.score=score; }}然后,我们定义班级类,班级类里,需要有每个学生,且需要提供方法,满足校长和老师的原创 2021-04-06 17:36:00 · 111 阅读 · 0 评论 -
设计模式之策略模式(Strategy Pattern)&&设计模式之状态模式(State Pattern)
策略模式和状态模式的代码实现方式很类似,但是两者又有本质区别,我们将两种模式放在一起讲解,以便比较两者的异同。*策略模式1.解决的问题设计模式都是为解决某种问题而产生的。策略模式解决的问题就是:当我们的代码里有很多的if…else if…语句时,且每个条件都是独立的算法,没有相互关联时,我们可以考虑用策略模式,来拆解臃肿的if…else语句,降低代码耦合度。2.实现方式我们将每个条件判断语句内的算法都定义成一个策略,不同的策略实现同一个策略接口,以保证统一。在if…else…的条件判断模块原创 2021-04-07 11:23:00 · 229 阅读 · 1 评论 -
UML类图的制作规则
在设计模式中,每个设计模式都可以用UML类图进行表示,我们记录一下UML类图的相关规则:类:接口:依赖:就是在一个方法的参数或局部变量里,用到了另一个类,就是依赖另一个类了。继承:实现:组合/聚合:一个是实心的,一个是空心的,这两者的区别我们暂时先不区分,记住即可。菱形在大的一方,即包含的一方。关联:双向关联关系,你中有我,我中有你...原创 2021-04-08 16:37:17 · 461 阅读 · 0 评论