![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
做不秃头的程序员
这个作者很懒,什么都没留下…
展开
-
Java设计模式-中介者模式
19、中介者模式中介模式的设计思想跟中间层很像,通过引⼊中介这个中间层,将⼀组对象之间的交互关系 (或者依赖关系)从多对多(⽹状关系)转换为⼀对多(星状关系)。原来⼀个对象要跟 n 个对象交互,现在只需要跟⼀个中介对象交互,从⽽最⼩化对象之间的交互关系,降低了代码 的复杂度,提⾼了代码的可读性和可维护性。UML类图:**抽象中介者:**定义了各个同事之间交互需要的方法。**具体中介者:**需要了解维护各个同事对象,并且负责协调各个具体同事之间的交互。**抽象同事类:**约束具体同事类的类型、并且原创 2020-10-18 11:03:46 · 152 阅读 · 0 评论 -
Java设计模式-观察者模式
18、观察者模式当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。UML类图:具体实例:气象台有温度、湿度的数据,而百度天气网站、新浪天气网站要展示气象台的温度、湿度的数据。具体示例的UML类图:Java代码:// 观察者public interface Observer { void update(float temperature, float humidity);原创 2020-10-18 11:01:37 · 153 阅读 · 0 评论 -
Java设计模式-迭代器模式
17、迭代器模式**迭代器模式(Iterator):**提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。在容器里存放了大量的同类型对象,我们如果想逐个访问容器中的对象,就必须要知道容器的结构。比如,ArrayList 和 LinkedList 的遍历方法一定是不一样的,这对于容器的使用者而言,肯定是一个巨大的负担。作为容器的使用者,我肯定希望所有的容器能提供一个统一的接口,这个接口可以遍历容器中的所有内容,又可以把容器的细节屏蔽掉。确实存在这样的一个统一的接口,这个接口就是原创 2020-10-18 11:00:23 · 130 阅读 · 0 评论 -
Java设计模式-访问者模式
16、访问者模式**访问者(Visitor)模式的定义:**将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。访问者模式的使用场景:对象结构比较稳定,但经常需要在此对象结构上定义新的操作。需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免这些操作“污染”这些对象的类,也不希望在增加新操作时修改这些类。原创 2020-10-18 10:59:13 · 146 阅读 · 0 评论 -
Java设计模式-命令模式
15、命令模式命令模式就是将“动作的请求者”从“动作的执行者”对象中解耦。具体示例:遥控器可以操控多个电器,每个电器有开和关两个按钮(分别对应开和关命令)。UML类图:Java代码:// 命令接口public interface Command { void execute();}// 开灯命令public class LightOnCommand implements Command { Light light; public LightOnCommand原创 2020-10-18 10:57:53 · 128 阅读 · 0 评论 -
Java设计模式-模板模式
14、模板模式模板模式就是一个抽象类公开定义了执行它的方法的模板。它定义了一个操作中的算法核心,然后将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定的步骤。具体例子:假如到银行办理业务,有 取号、办理具体业务、反馈评分 这些步骤。UML类图:Java代码:// 抽象的银行类public abstract class BankTemplate { //取号操作 public void takeNumber(){ S原创 2020-10-18 10:57:06 · 67 阅读 · 0 评论 -
Java设计模式-享元模式
13、享元模式说到享元模式,第一个想到的应该就是池技术了,String常量池、数据库连接池、缓冲池等等都是享元模式的应用,所以说享元模式是池技术的重要实现方式。享元模式是运用共享技术有效的支持大量细粒度的对象。享元对象能做到共享的关键是区分了内部状态以及外部状态:内部状态:可以共享,不会随环境改变而改变。外部状态:不可以共享,会随环境改变而改变。享元模式通用UML类图:具体例子:以围棋为例子,围棋颜色、大小是可以共享的,所以颜色和大小可以称为内部状态,但围棋在棋盘上的位置是不共享的,所以原创 2020-10-18 10:56:22 · 85 阅读 · 0 评论 -
Java设计模式-外观模式
12、外观模式**外观模式:**又叫门面模式,提供一个统一的接口,用来访问子系统中的一群接口。问题提出:系统常常划分为若干个子系统,但是如何做到各个系统之间的通信和相互依赖关系达到最小呢?外观模式为子系统中的一组接口提供一个一致的界面, 外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。引入外观角色之后,用户只需要直接与外观角色交互,用户与子系统之间的复杂关系由外观角色来实现,从而降低了系统的耦合度。通过子系统的互相组合,可以产生多个外观类。例子:一个电源总开关可以控制四盏灯、一个风扇原创 2020-10-18 10:55:16 · 191 阅读 · 0 评论 -
Java设计模式-组合模式
11、组合模式**组合模式:**将对象组合成树形结构以表示“部分-整体”的层次结构。应用场景:大学里有多个学院,每个学院有多个专业。UML类图://抽象的组织类public abstract class Organization { protected String name; public Organization(String name){ super(); this.name = name; } protected void原创 2020-10-18 10:54:27 · 75 阅读 · 0 评论 -
Java设计模式-装饰者模式
10、装饰者模式装饰者模式:动态的将新功能附加到对象上。体现了开闭原则。应用场景:咖啡店里有深焙咖啡、浓缩咖啡。咖啡可以加的调料有巧克力调料、奶泡调料。装饰者类图如下:代码:public abstract class Coffee { protected String description; protected Integer price; public abstract String getDescription(); public abstract Inte原创 2020-10-18 10:52:50 · 217 阅读 · 2 评论 -
Java设计模式-桥接模式
9、桥接模式定义:将抽象部分与它实现部分分离,是它们都可以独立地变化。桥接模式将继承关系转化成关联关系,它降低了类与类之间的耦合度,减少了系统中类的数量。**应用场景:**一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时,可以使用桥接模式。举例:电脑品牌有苹果、联想,电脑的种类有台式机、笔记本,所以电脑是两个维度,这两个维度可以扩展,比如加一个戴尔品牌等。那么我们可以使用桥接模式来低耦合。如下图:当我们需要扩展一个品牌或者电脑类型时只需要横向扩展。代码如下://品牌public原创 2020-10-17 15:08:25 · 97 阅读 · 0 评论 -
Java设计模式-适配器模式
8、适配器模式1、对象适配器适配器模式是作为两个不兼容的接口之间的桥梁,让原来不兼容的两个接口协同工作。意图:将一个类的接口转换成客户希望的另一个接口。**注意事项:**适配器不是在详细设计时添加的,而是解决正在服役的项目要添加新的功能导致不兼容的问题。实例背景:播放器Player只能播放Mp4音频文件,而我们要播放的音频文件Mp3的格式为Mp3,所以需要一个适配器Adapter来将Mp3转换为Mp4。//Mp3文件public class Mp3 { public void pla原创 2020-10-17 15:07:15 · 86 阅读 · 0 评论 -
Java设计模式-原型模式
7、原型模式**原型模式的定义:**用一个已经创建好的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。(深复制)这种模式是实现一个接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。**如何实现:**在Java中,就是让类继承Cloneable,重写clone方法。public class Propoty implements Cloneable { String name; Date date; public Propot原创 2020-10-17 15:06:22 · 69 阅读 · 0 评论 -
Java设计模式-建造者模式
6、建造者模式属于创建型模式。定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。(举例:就是要创建跳舞机器人和创建唱歌机器人,我们只需更建造者说我们需要跳舞机器人,它就会给我们创建跳舞机器人,创建唱歌机器人同理,这就是构建与表示分离,用同样的构建过程创建不同的表示。)与工厂模式的区别是:建造者模式更加关注于零件装配的顺序,一般用来创建更为复杂的对象。建造者模式最重要的就是Director(领导者),规定了建造的顺序。优点:易于扩展。想要唱歌机器人只要单独将这个类原创 2020-10-17 15:05:39 · 125 阅读 · 0 评论 -
Java设计模式-工厂模式
5、工厂模式工厂就是创建产品,该模式就是将创建对象的任务交给工厂。1、简单工厂模式也称为静态工厂模式,不属于32种经典设计模式,违背“开闭原则”,举例如下:上面是UML类图,其中是类的一些关系。代码如下:public interface Car { void printName();}public class BMW implements Car { @Override public void printName() { System.out.pr原创 2020-10-17 15:04:20 · 71 阅读 · 0 评论 -
Java设计模式-单例模式
4、单例模式单例模式就是确保某个类只有一个实例,有三种实现方式:饿汉模式、懒汉模式、静态内部类。(枚举类也是实现单例)单例有三个特点:1、私有构造函数;2、有指向自己实例的私有静态引用;以自己实例为返回值的静态公有方法。1、饿汉模式就是在类加载初始化的时候就主动创建实例。优点:线程安全,调用效率高。缺点:在还没被使用前一直占用内存,浪费内存空间。//饿汉模式public class Single { private Single(){ //注意是私有 } pr原创 2020-10-17 15:01:58 · 94 阅读 · 0 评论 -
Java设计模式-面向对象7大原则
1、面向对象7大原则**1、开闭原则:**对扩展开放,对修改改变。**2、里氏替换原则:**只要父类出现的地方,子类都可以替换他,使用者可能都不知道到底是子类还是父类(就是子类继承了超类,在子类中保持超类的特性)**3、单一职责原则:**对类来说,就是一个类应该只负责一项职责。**4、依赖倒置原则:**要面向接口编程,不要面向实现编程。**5、接口隔离原则:**客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。**6、迪米特原则:**一个类对自己依赖的其他类知道的越原创 2020-10-17 14:54:57 · 293 阅读 · 0 评论