
设计模式
文章平均质量分 68
CHJH_MingYI
我只是一个蒟蒻,所写的博客也只是为了记录下遇到的问题。如果可以对你有所帮助,不胜荣幸。
展开
-
设计模式之访问者模式
访问者模式什么是访问者模式访问者模式表示一个作用于某对象结构中的各种元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。原理图注意点访问者模式符合单一职责原则,但是访问者关注了其他类的内部细节,不遵循迪米特法则,同时由于访问者依赖的是具体元素而不是抽象元素,违背了依赖倒转原则。访问者模式适用于具有稳定数据结构,功能需求经常改变的场景。轻易不会使用到访问者模式,但如果你的场景真的需要访问者模式的时候,那么他是非常合适的。为什么要用访问者模式问题背景BJTU现可招原创 2021-11-11 19:59:38 · 1010 阅读 · 0 评论 -
设计模式之命令模式
命令模式什么是命令模式命令模式是将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作。原理图为什么要用命令模式还记得在外观模式中我们所提到的智慧生活吗?我们来仔细想一下这个逻辑,智慧助手相当于一个遥控器,用于发出命令,让接收端(具体智能家居)做出相应的反应。在我们当时的实现中,只是体现出了智慧助手的统一调用,但并没有体现出“命令”,现在,让我们来体现一下“命令”。假设现在只有灯和空调两个智能家居:public class Lam原创 2021-11-10 16:08:57 · 413 阅读 · 0 评论 -
设计模式之模板方法模式
模板模式什么是模板方法模式原理图为什么要用模板方法模式什么是模板方法模式模板方法模式是定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。原理图为什么要用模板方法模式现在有一个xls文件里的数据需要处理,经过处理后需要输出到一个txt文件中。实现方式非常简单:写一个处理类:public class Processor { public void inputData(){ System.out.原创 2021-08-12 23:32:58 · 199 阅读 · 0 评论 -
设计模式之代理模式
代理模式什么是代理模式代理模式是为其他对象提供一种代理以控制对这个对象的访问。代理模式可以分为两种:静态代理:代理类在编译器已经确定。动态代理:代理类在JVM运行时动态生成。静态代理相对动态代理来说,效率比较高,但是一旦修改静态代理的接口,代理类和委托类都需要做出修改,十分恼人。原理图注:该原理图是静态代理原理图。动态代理时,Proxy类无需实现Subject,若使用cglib进行代理,则Subject接口可以不存在,但代理类需要实现MethodInterceptor接口。为什么要用原创 2021-08-11 22:41:37 · 184 阅读 · 0 评论 -
设计模式之享元模式
享元模式什么是享元模式“享元”,这是什么,这词不是很常见啊,不像工厂模式、建造者模式等,看见名字就能大概猜个八九不离十。享,即共享。元,是指一个单位,或者说是一个对象。享元模式是运用共享技术有效地支持大量细粒度的对象的设计模式。由于是细粒度单位的共享,享元模式又叫蝇量模式。原理图注意:内部状态与外部状态使用享元模式,一定要分清什么可以共享(内部状态),什么不能共享(外部状态)。内部状态是指对象共享出来的信息,储存在享元对象内部且不会随着环境的改变而改变。外部状态是指对象得以依赖原创 2021-08-10 23:40:23 · 229 阅读 · 0 评论 -
设计模式之外观模式
外观模式什么是外观模式原理类图为什么要用外观模式自己开开关好麻烦智慧生活什么是外观模式外观模式位子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。原理类图为什么要用外观模式自己开开关好麻烦回到家,要自己开灯,开空调,开启热水器……睡觉之前要关灯,关空调,关闭热水器……想要在家里有很好的观影体验需要关灯,连接蓝牙音箱……这样的场景还有很多,我们和各个家电的关系如下图:但是有时候,回到家很累,不想走来走去只是为了打开电器,原创 2021-08-09 22:50:30 · 321 阅读 · 0 评论 -
设计模式之组合模式
组合模式什么是组合模式原理类图为什么要用组合模式当前类图什么是组合模式组合模式是将对象组合成树形结构以表示“部分—整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。原理类图为什么要用组合模式今年学校的创新创业大赛结果非常好啊,计算机学院有一组学生做出来一份非常好的作品。这个产品可以提供一个非常高效的师生信息流通的渠道。学院打算加以应用并推广。为了保证这产品确实可用,不会推出后学生没法用,学院不好处理。学院打算先在学院内部使用一下:计算机学院:public class原创 2021-08-08 23:44:55 · 190 阅读 · 0 评论 -
设计模式之装饰者模式
装饰者模式什么是装饰者模式原理类图:为什么要用装饰者模式当前类图:和建造者模式很像?什么是装饰者模式装饰者模式是动态地给一个对象添加一些额外的职责,就增加功能来说,装饰者模式比生成子类更为灵活。原理类图:需要说明的一点是,不必一定按照上面的形式,如果没有抽象出Component的需求,可以直接让装饰者继承具体组件,毕竟,本来装饰者就是给具体组件装饰的。为什么要用装饰者模式假设有一位女生想要出门,这出门要想精致一点,就得化化妆,化妆这件事用代码怎么模拟呢?基本实现如下:首先得有一个人:pu原创 2021-08-07 23:19:06 · 93 阅读 · 0 评论 -
设计模式之桥接模式
桥接模式什么是桥接模式原理图为什么要用桥接模式使用桥接模式:什么是桥接模式桥接模式是讲抽象部分与它的实现部分分离,使他们都可以独立地进行变化。需要注意的是这里说的抽象与实现分离,并非类似抽象类与其派生类分离。实现部分指的是抽象类和他的派生类用来实现自己的对象。说通俗点,就是实现系统可能有多角度分类,每一种分类都有变化的可能,那么把这种多角度分离出来让他们独立变化,减少他们之间的耦合,便是桥接模式的使用。原理图为什么要用桥接模式试想市面上的手表:按功能分,可以分为普通手表、智能手表等原创 2021-08-06 23:08:03 · 145 阅读 · 1 评论 -
设计模式之适配器模式
适配器模式什么是适配器模式适配器模式是将一个类的接口转换成客户希望的另一个接口,适配器模式可以使原本由于接口不兼容而不能一起工作的那些类可以一起工作。其原理图如下:为什么要使用适配器模式现在,手机需要进行充电,但是手机需要的是5V的电压,墙上的插口只能提供220V的电压(外国还有110V电压),这显然是不能直接给手机充电的。在日常生活中,我们是使用电源适配器进行适配,顾名思义,这是一个适配器。我们可以通过手机的充电过程来理解适配器模式:首先,有一个插孔(墙上或插线板上的220V的插孔):p原创 2021-08-05 19:20:30 · 132 阅读 · 0 评论 -
设计模式之建造者模式
建造者模式什么是建造者模式建造者模式是将一个复杂对象的构建与它的表示分里,是的同样的构建过程可以创建不同的表示。简单来说,当我们需要一个复杂的对象,这个对象由许多组件组成,并且装配方式比较复杂时,就需要使用建造者模式来屏蔽这些装配细节,只需要关心最终的对象即可。其类图如下:为什么要用建造者模式我们来想这么一个情况:现在有一个开发商,需要在一片地区上盖楼。用代码模拟出来很简单吧。首先我们需要明确盖房子的步骤,假设只有打地基、砌墙、盖房顶三步:需要有一个房子类:public class H原创 2021-08-04 22:08:17 · 140 阅读 · 0 评论 -
设计模式之原型模式
原型模式什么是原型模式为什么要用原型模式初步实现分析使用原型模式实现分析深拷贝与浅拷贝什么是原型模式原型模式是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。为什么要用原型模式现在有一份纸质版问卷,发问卷的人希望你可以多找一些人填写问卷,你应该怎么做?答案很简单,找个复印店复印几份嘛:初步实现问卷类:public class Paper { private String title; private String author; private Str原创 2021-07-22 15:34:28 · 87 阅读 · 0 评论 -
抽象工厂模式
抽象工厂模式什么是抽象工厂模式为什么要使用抽象工厂模式新时期有新问题简单工厂模式实现:存在的问题抽象工厂模式实现:类图什么是抽象工厂模式抽象工厂模式提供了一个创建一系列相关或相互依赖对象的接口,无需指定它们具体的类。可以简单理解成是围绕一个超级工厂来创建其他工厂(这个超级工厂是其他工厂的工厂)。适用场景:客户端(应用层)不依赖于产品类实例如何被创建、实现等细节。强调一系列相关的产品对象(属于同一产品簇)一起使用创建对象需要大量的重复代码。提供一个产品类的苦,所有的产品以同样的接口出现,从而使原创 2021-07-21 16:17:04 · 90 阅读 · 0 评论 -
工厂模式之工厂方法模式
工厂模式之工厂方法模式什么是工厂方法模式为什么要用工厂方法模式有没有别的方式来优雅实现?工厂方法模式实现:类图:这和最传统的方式有什么区别?什么是工厂方法模式工厂方法模式是工厂模式的一种,用于生产同一等级中的固定产品(支持增加任意产品)。它定义了一个创建对象的抽象方法,由子类决定要实例化的类。也就是说,工厂方法模式,将对象的实例化推迟到子类中实现。为什么要用工厂方法模式通过使用简单工厂模式,我们可以很优雅得实现不同播放器的调用。有没有别的方式来优雅实现?俗话说,条条大路通罗马,优雅实现的方式也原创 2021-07-20 12:28:51 · 147 阅读 · 0 评论 -
工厂模式之简单工厂模式
工厂模式之简单工厂模式什么是简单工厂模式为什么要用简单工厂模式实现分析什么是简单工厂模式简单工厂模式是工厂模式的一种,由一个工厂对象决定创建出哪一种产品类的实例,用于生产同一等级结构中的任意产品(对于新增加的产品,需要覆盖已有代码,故也被称为“静态工厂模式”)。简单工厂模式是最简单实用的工厂模式。为什么要用简单工厂模式在之前的例子中,需要由客户端来明确创建哪一个对象实例,调用者即创建者,调用过程严重依赖具体实现。对于功能的扩展也需要改动大量的客户端代码。之前的例子既没有封装对象的创建过程,又违背了原创 2021-07-19 14:55:02 · 110 阅读 · 0 评论 -
工厂模式及问题的传统实现
工厂模式及问题的传统实现什么是工厂模式为什么要用工厂模式功能需求与简单实现功能需求简单实现分析JDK 中的 Calendar 类中,使用了简单工厂模式什么是工厂模式工厂模式是一个创建型模式,是由一个工厂对象决定创建出哪种产品类的实例的设计模式。工厂模式可以细分为两种:简单工厂模式工厂方法模式为什么要用工厂模式为了将实例化对象的代码提取出来,放到一个类中统一管理和维护,使得主项目的依赖关系解耦,提高项目的可扩展性和可维护性,使创建者和调用者分离。在软件开发过程中,如果会用到大量的创建某种原创 2021-07-19 14:53:15 · 131 阅读 · 0 评论 -
设计模式之单例模式
单例模式什么是单例模式为什么要使用单例模式实现方式(java)饿汉式两种实现方式:1. 静态常量2 .静态代码块懒汉式三种实现方式:1. 线程不安全2. 线程安全、同步方法3. 同步代码块(并不能保证线程安全)双重检查(推荐使用)静态内部类(推荐使用)枚举(推荐使用)什么是单例模式单例模式是采取一定的方法,保证在整个系统中对于某一个类,只存在一个对象实例,并且只提供一个取得其对象实例的方法。为什么要使用单例模式单例模式保证了系统内存中只存在一个对象,节省了系统资源,对于一些需要频繁创建销毁的对现象,原创 2021-07-18 12:26:28 · 567 阅读 · 0 评论 -
设计模式七大原则之合成复用原则
设计模式七大原则之合成复用原则什么是合成复用原则当一个类需要使用另一个类的属性或方法时,尽量使用组合或聚合的方式,而非继承的方式。举个栗子class A { public void function1(){} public void function2(){}}class B extends A { public void function(){ super.function1(); super.function2(); }}原创 2021-07-17 12:22:50 · 69 阅读 · 0 评论 -
设计模式七大原则之迪米特法则
设计模式七大原则之迪米特法则什么是迪米特法则迪米特法则又称为最少知道原则。在类的结构设计上,每一个类都应当尽量降低成员的访问权限,每个类都应该尽量将逻辑封装在类内部,不需要外部知道的字段或行为就不应该公开。类应该只与其直接朋友(成员变量、方法参数、方法返回值的类)通信,尽量避免其他类以局部变量的形式出现在类内部。迪米特法则强调了类之间的松耦合,类之间的耦合度越松,越有利于复用。举个栗子现在A、B两个类中都有各自的一个集合,现在需要输出其各自的集合中的元素:public c原创 2021-07-17 12:22:23 · 221 阅读 · 1 评论 -
设计模式七大原则之开闭原则
设计模式七大原则之开闭原则什么是开闭原则开闭原则是编程中最基础、最重要的设计原则,是设计模式的核心。开闭原则是指:对扩展开放,对修改封闭。也就是说,当软件需要变化时,尽量通过扩展软件实体的行为的方法来实现,而不是在现有代码的基础上做出修改来实现。举个栗子假设现在我们希望有一个类,可以根据传入的类不同,输出其类型:public class Ocp { public static void main(String[] args) { Worker worker = new原创 2021-07-17 12:21:42 · 284 阅读 · 0 评论 -
设计模式七大原则之依赖倒转原则
设计模式七大原则之依赖倒转原则什么是依赖倒转原则高层模块不应该依赖底层模块,二者都应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。说这样的官话确实比较难以理解,那么来说点人话:依赖倒转原则主要是要体现出**“面向接口编程”**的中心思想。细节是多变的,抽象是相对稳定的,以抽象为基础搭建的结构会比以细节为基础的架构稳定很多。抽象指接口、抽象类,细节为具体的实现类。在实现功能时,要多用接口或抽象类去制定一个规范,比如传参时更多地使用接口或抽象类来规定变量,而非某一个具体的实现类,这样在原创 2021-07-16 12:51:23 · 179 阅读 · 0 评论 -
设计模式七大原则之里氏代换原则
设计模式七大原则之里氏代换原则什么是里氏代换原则子类型必须能够替换掉它们的父类型,为里氏代换原则。说全了就是,把父类替换成它的子类,程序的行为没有变化。可以让引用父类的地方必须能够透明地使用其子类的对象。如何遵循:子类中尽量不重写其父类的方法。举个栗子public class Liskov { public static void main(String[] args) { A a = new A(); System.out.println("6-3原创 2021-07-16 12:49:06 · 168 阅读 · 0 评论 -
设计模式七大原则之接口隔离原则
设计模式七大原则之接口隔离原则什么是接口隔离原则一个类对另一个类的依赖应该建立在最小的接口上。举个栗子interface Animal { void run(); void fly(); void swim(); void eat(); void sleep();}class Bird implements Animal { @Override public void run() { } @Override publi原创 2021-07-15 12:20:26 · 146 阅读 · 0 评论 -
设计模式七大原则之单一职责原则
设计模式七大原则之单一职责原则什么是单一职责原则就一个类而言,应该仅有一个引起它变化的原因,一个类应该只负责一项职责。一项职责不是说一个类内仅有一个方法,这个方法是一个职责,而是说该类负责了一方面的事情,比如课代表负责该科目的考勤、收发作业等而不负责教书等工作(这是属于教师的工作)。举个栗子public class SingleResponsibility { public static void main(String[] args) { Aircraft aircr原创 2021-07-15 12:17:42 · 79 阅读 · 0 评论 -
设计模式——为什么要使用设计模式及设计模式要遵循什么原则
关于功能实现:对于实现一个功能而言,只要能实现就可以,但是在整个软件的角度来看,一个个功能需求不仅仅只是实现功能而已,往往还有耦合性、内聚性、可维护性等方面的需求。因此,我们需要使用设计模式使得代码更加健壮。设计模式的目的提高代码重用性: 相同功能的代码不需要多次编写。提高代码可读性: 增加代码编写的规范性,便于其他人阅读和理解代码。提高可扩展性: 当需要增加新功能时,可以轻松地完成。提高可靠性: 增加新的功能后,原有功能依然可以正常运行。使程序呈现出高内聚、低耦合的特性。...原创 2021-07-14 14:40:45 · 384 阅读 · 0 评论