设计模式
HCH996
一边失去,一边在寻找~
展开
-
单例模式
目录单例模式单例设计模式八种方式(1)饿汉式静态常量应用实例(2)饿汉式静态代码块(3) 懒汉式非线程安全写法(4) 懒汉式线程安全写法(5) 懒汉式(线程安全,同步代码块)(6) 双重检查机制(7) 静态内部类(8) 枚举类单例模式的使用场景单例模式所谓的单例模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且只提供一个获取其对象实例方法(静态方法)。单例模式的好处是可以重复的使用这个唯一的对象。比如单例设计模式八种原创 2020-12-17 17:28:45 · 236 阅读 · 0 评论 -
工厂模式之JDK应用场景和总结
工厂模式的意义将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦,从而提高项目的扩展和维护性。 三种工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式) 设计模式的依赖抽象原则创建对象实例时,不要直接new类,而是把这个new类的动作放在一个工厂的方法中,并返回。(依赖一个抽象的, 类似于缓冲层) 不要让类继承具体类,二是继承抽象类或者是实现interface(接口)。 不要覆盖基类中已经实现的方法。...原创 2020-12-17 15:28:32 · 305 阅读 · 0 评论 -
工厂模式之抽象工厂模式
抽象工厂模式:定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类 抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合 从设计层面上看,抽象工厂模式是对简单工厂模式的改进(或者称为进一步的抽象) 将工厂抽象成两层,AbsFactory(抽象工厂)和具体实现的工厂子类。程序员可以根据创建对象类型使用对应的工厂子类。这样将单个的简单工厂类变成了工厂簇,更利于代码的维护和扩展。...原创 2020-12-17 15:14:55 · 99 阅读 · 0 评论 -
工厂模式之工厂方法模式
看一个新的需求披萨项目新的需求:客户在点披萨时,可以点不同口味的披萨,比如 北京的奶酪pizza, 北京的胡椒pizza, 或者是伦敦的奶酪pizza、伦敦的胡椒奶酪pizza思路1使用简单工厂模式,创建不同的简单工厂类,比如BJPizzaSimpleFactory, LDPizzaSimpleFactory等等。考虑到项目的规模,以及软件的可维护性,可扩展性并不是特别好。思路2, 使用工厂方法模式设计方案:将披萨项目的实例化功能抽象成抽象方法,在不同的口味点餐子类中具体实现。 工厂...原创 2020-12-17 14:49:23 · 107 阅读 · 0 评论 -
工厂模式之简单工厂模式
目录项目引入传统方式简单工厂模式项目引入看一个披萨的项目: 要便于披萨种类的扩展,要便于维护。(1)披萨的种类很多(比如GreekPizz, CheesePizz等) (2) 披萨的制定有prepare bake, cut, box (3) 完成披萨点订购功能传统方式Pizza.javapackage factory.simplefactory;//将Pizza做成抽象的public abstract class Pizza { protected S原创 2020-12-17 12:01:22 · 107 阅读 · 0 评论 -
建造者模式
目录盖房项目需求传统方案代码实现传统方式解决盖房需求问题分析建造者模式建造者模式的四个角色代码实现建造者模式在JDK的应用和源码分析建造者模式的注意事项和细节盖房项目需求1) 需要建房子:这一过程为打桩、砌墙、封顶2)房子由各种各样的,比如普通房、高楼、别墅、各种房子的过程虽然一样,但是要不却不相同3) 请编写程序,完成需求传统方案代码实现AbstractHouse.javapackage builder;public abstr原创 2020-11-10 11:05:08 · 242 阅读 · 0 评论 -
桥接模式
手机操作问题传统方案解决手机操作问题传统方案解决手机操作问题分析1) 扩展性问题(类爆炸),如果我们再增加手机样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加一个手机品牌,也要在各个手机样式类下增加2) 违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本。3) 解决方案-使用桥接模式基本模式1)桥接模式(Bridge模式):将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变2)是一种结构型设计模式3)..原创 2020-11-04 18:19:53 · 116 阅读 · 0 评论 -
适配器模式
基本介绍和工作原理适配器模式将某个类的接口转化成客户端期望的另一个接口表示,主要的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper) 适配器模式属于结构型模式,不会创建新的对象出来 主要分为三类:类适配器、对象适配器模式、接口适配器模式 生活中的例子:泰国插座的是两孔的,可以买个多功能转换插头(适配器),这样就可以使用了工作原理适配器模式:将一个类的接口转换成另一种接口,让原本接口不兼容的类可以兼容 从用户的角度看不到被适配者,是解耦的 用原创 2020-10-07 21:25:38 · 132 阅读 · 0 评论 -
原型模式
目录克隆羊问题传统方式原型模式原型模式在Spring框架中源码分析原型模式-深浅拷贝浅拷贝深拷贝代码案例方式一:重写clone方法来实现方式二:通过对象序列化实现原型模式的注意事项和细节克隆羊问题传统方式现在有一只羊,姓名为:tom,年龄为:1,颜色为:白色,请编写程序创建和tom羊,属性完全相同的10只羊package prototype;public class Client { public static void main(S原创 2020-10-07 10:54:28 · 329 阅读 · 0 评论 -
命令模式
智能生活项目需求我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,我们只要在手机上安装app就可以控制对这些家电工作 这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个App,分别控制,我们希望只要实现一个app就可以控制全部智能家电。 要实现一个app控制所有智能家电的需要,则每个智能家电厂家都要提供一个统一的接口给app调用,这时就可以考虑使用命令模式 命令模式可将“动作的请求者"从"动作的执行者"对象中解耦出来 在我们的例子中,动作的请求是手机app,动作的执行者是每个厂商的一原创 2020-10-06 15:44:29 · 166 阅读 · 0 评论 -
模板模式
项目需求编写制作豆浆的程序,说明如下:制作豆浆的流程 选材---->添加配料---->浸泡---->放到豆浆机打碎 通过添加不同的配料,可以制作出不同口味的豆浆 选材、浸泡和放到豆浆机打碎这个几个步骤对于制作每种口味的豆浆都是一样的(红豆豆浆,花生豆浆) 请使用模板方法完成1)模板方法模式,又叫模板模式,在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行2)简单说,模板方法模式定义一个操作中的骨架,而将一些步骤延迟原创 2020-10-06 10:44:30 · 275 阅读 · 0 评论 -
代理模式
代理模式的基本介绍1)代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象。这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 2)被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象 3)代理模式有不同的形式,主要有三种 静态代理、动态代理(JDK代理、接口代理)和Cglib代理(可以在内存动态的创建对象,而不需要实现接口,他是属于动态代理的范畴)。 4)代理模式示意图静态代理模式静态代理在使用时,需要定义原创 2020-10-05 20:37:16 · 108 阅读 · 0 评论 -
装饰者模式
目录项目需求方案一分析方案二分析装饰者模式装饰者模式下的订单:2份巧克力+一份牛奶的LongBlackUML类图代码实现装饰者模式在JDK应用的源码分析项目需求星巴克咖啡订单项目(咖啡馆)咖啡种类/单品咖啡: Espresso(意大利浓咖啡), ShortBlack, LongBlack(美式咖啡), Decaf(无因咖啡) 调料:Milk Soy(豆浆) Chocolate 要求在扩展新的咖啡种类时,具有良好的扩展性,改动方便,维护方便 使用OO.原创 2020-10-05 12:30:21 · 329 阅读 · 0 评论 -
观察者模式
天气预报项目需求,具体要求如下:气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或者第三方) 需要设计开放行API,便于其他第三方也能接入气象站获取数据 提供温度、气压和湿度的接口 测量数据更新时,要能实时的通知给第三方方案一:初步设计一个WeatherData类通过getXXX方法,可以让第三方介入,并得到相关信息。 当数据有更新时,气象站可以通过调用dataChange()去更新数据,当第三方再次获取时,就能得到最新数据,当然也可以推送。(如下原创 2020-10-05 09:48:04 · 295 阅读 · 0 评论 -
UML类图六大关系组合
基本介绍UML-Unified modiling language UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果 UML本身是一套符号的规则,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和它们之间的关系,比如类、接口、实现、泛化、依赖(可以理解为使用)、组合、聚合等 使用UML来建模,常用的工具有Rational Rose,也可以使用一些插件来建模可以使用staruml_5.0_with_cm UML工具.原创 2020-10-04 16:46:36 · 3168 阅读 · 0 评论 -
合成复用原则
基本介绍原则是尽量使用合成/聚合的方式,而不是使用继承设计原则核心思想找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起 针对接口编程,而不是针对实现编程 为了交互对象之间的耦合设计而努力...原创 2020-10-04 11:45:08 · 196 阅读 · 0 评论 -
迪米特法则
基本介绍一个对象应该对其他对象保持最少的了解 类与类关系越密切,耦合度越大 迪米特法则又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供public方法,不对外泄漏任何信息 迪米特法则还有个更简单的定义:只与直接的朋友通信 直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说着这两个对象之间是朋友关系。耦合的方式有很多,依赖,关联,组合,聚合等。其中,我们称出现成员变量,原创 2020-10-04 11:06:16 · 98 阅读 · 0 评论 -
图解Java设计模式-开闭原则
开闭原则是编程中最基础,最重要的设计原则 一个软件实体如类,模块和函数应该对外开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化 编程中遵循其他原则,以及使用设计模式的目的就是遵循开闭原则。package ocp;import java.awt.image.CropImageFilter;public class Ocp { public static void m原创 2020-10-04 09:28:44 · 353 阅读 · 0 评论 -
图解设计模式-里氏替换原则
OO中的继承的思考和说明1) 继承包含这样一层含义:父类中凡是已经实现好的方法,实际上都在设定规定和契约,虽然它不强制要求所有的子类必须遵循这些契约,但是如果子类对这些已经实现的方法任意修改,就会对整个继承体系造成破坏。 2)继承在给程序设计带来便利的同时,也带来了弊端。比如使用继承会给程序带来侵入性,程序的可移植性降低,增加对象间的耦合,如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能产生故障。 3)问题提出;在编程中,如何正确的原创 2020-10-03 20:07:19 · 93 阅读 · 0 评论 -
图解Java设计模式-依赖倒转原则
依赖倒转原则是指:高层模块不应该依赖底层模块,二者都应该依赖其抽象 抽象不应该依赖细节,细节应该依赖抽象 依赖倒转(倒置)的中心思想是面向接口编程 依赖倒置原则是基于这样的设计理念:相对于细节的多变形,抽象的东西要稳定得多。以抽象为基础搭建的结构比以细节搭建为基础的架构要稳定得多。在java中,抽象指的是接口或抽象类,细节就是具体的实现类 使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。方式一代码实现package inversion;原创 2020-10-03 18:36:50 · 219 阅读 · 0 评论 -
图解设计模式-接口隔离方法原则
基本介绍客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口。先看一张图package Segregation;public class Segregation1 {}//接口interface Interface1{ void operation1(); void operation2(); void operation3(); void operation4(); void operation5();}cl原创 2020-10-03 12:22:15 · 128 阅读 · 0 评论