23种设计模式
想当厨子的程序媛
前期追深度,否则会华而不实,后期追广度,否则会坐井观天;
展开
-
设计模式11——观察者模式
1. 定义当一个对象(被观察对象)被修改时,则会自动通知它的依赖对象。2. 类图3. 实现3.1 Subject 被观察者类package observer;import java.util.ArrayList;import java.util.List;public class Subject { private int state; public List...原创 2020-02-23 17:41:46 · 125 阅读 · 0 评论 -
设计模式10——装饰器模式
1. 定义“假如现在有一个块饼,如果只涂上黄油,其他什么都不加,就是煎饼。如果加一个鸡蛋,就是鸡蛋饼。如果再加上一根香肠,就变成一个香肠鸡蛋饼。不论是饼、煎饼、鸡蛋饼还是香肠鸡蛋饼,它们的核心都是饼。不过,经过涂上黄油,加上鸡蛋等装饰后,饼的味道变得更加甜美了,目的也变得更加明确了。程序中的对象与饼十分相似。首先有一个相当于饼的对象,然后像不断地装饰饼一样不断地对其增加功能,它就变成了使用目...原创 2020-01-16 14:53:07 · 184 阅读 · 0 评论 -
设计模式9——模板方法模式
长长的一生,总要勤勤恳恳,刻苦专研。把一件事情做到极致,不然,岂非白活了?一、举个栗子在造房子的时候,地基、走线、水管都一样,只有在建筑的后期才有加壁橱、床等装饰物。二、模式的结构定义一个抽象类:Day包含抽象出来的常用的方法(有实现)包含抽象方法,想要让子类去实现的(没有实现)【重要】为了恶意操作,就把模板方法前面加上 final关键字三、实例程序我这里就模拟一...原创 2019-02-25 21:18:53 · 155 阅读 · 0 评论 -
设计模式——破坏单例模式的集方法几种
一、单例模式我们以双重检查作为这个测试的单例模式。二、反射我们知道,通过反射机制,创建一个实例是非常轻而易举的事情。我们可以看到,通过上面的反射,输出的结果是单例已经被破坏了。那么怎么防止这个情况发生呢?那就是在单例类的私有构造方法中加入一些判断,来防止单例模式被反射破坏掉。这个时候再运行程序,控制台输出的结果是:三、序列化序列坏也可以破坏单例模式。原谅我用了两个不...原创 2019-02-25 10:25:46 · 505 阅读 · 0 评论 -
设计模式3——单例模式
这个模式一年前学完的,今天看看博客竟然没有总结!!!单例模式应该是最早接触的模式了吧!单例模式分为饿汉式和懒汉式1. 饿汉式(静态常量)优点:使用静态常量,因此在类加载的时候创建了,所以是线程安全的。缺点:因为在类加载的时候就创建了,所以如果程序中从来没有使用过该类的实例,那么就会出现内存浪费。2. 饿汉式(静态块)优点:使用静态常量,因此在类加载的时候创建了,所以是线程安全的...原创 2019-02-16 21:51:00 · 120 阅读 · 0 评论 -
设计模式8——责任链模式 Chain of Responsibility模式
一、举个栗子我们首先看看什么是推卸责任。假设现在我们去公司领取资料。首先我们向公司前台打听要去哪里领取资料,她告诉我们应该去“营业窗口”。然后等我们到了“营业窗口”后,又被告知应该去“售后部门”。等我们好不容易赶到了“售后部门”,又被告知应该去“资料中心”,因此最后我们又不得不赶到“资料中心”。像这样,在找到合适的办事人之前,我们被不断地赐给一个有一个人,这就是“推卸责任”。“推卸责任”听起来...原创 2019-02-01 16:49:37 · 160 阅读 · 0 评论 -
设计模式2——简单工厂与抽象工厂
定义:由一个工厂对象决定创建出哪一种产品类的实例类型:创建型,但不属于GOF23种设计模式一、简单工厂——适用场景工厂类负责创建的对象比较少客户端(应用层)只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心二、简单工厂——优缺点优点:只需要传入一个正确的参数,就可以获取你所需要的对象,而不需要知道其创建细节缺点:工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,违背了开...原创 2019-02-01 16:49:59 · 132 阅读 · 0 评论 -
设计模式7——适配器模式
一、举一个栗子如果想让额定工作电压是直流12V的笔记本电脑在交流100V的AC电源下工作,应该怎么做呢?通常,我们会使用AC适配器,将家庭用的交流100V电压转换成我们所需要的直流12V电压。这就是适配器的工作,它位于实际情况与需求之间,填补两者之间的差异。在程序世界中,经常会存在现有的程序无法直接使用,需要做适当的变换之后才能使用的情况。这种勇于填补“现有的程序”和“所需的程序”之间差异的设...原创 2019-02-01 17:03:46 · 145 阅读 · 0 评论 -
设计模式6——桥接设计模式
一、举一个栗子我们来画个画吧~这里有画笔,可以画长方形,正方形,圆形……任意你想画的形状。但是现在我们需要不止是画图形,还要给图形上颜色。这里可以上很多种颜色:白色、灰色、黑色、粉色……这样我们可以画出:形状的个数*颜色的个数种形状。那么问题来了,我们怎么将形状和颜色结合在一起画图呢? 方案就是:根据实际需要对颜色和形状进行组合。提供一个抽象类:形状父类。一个接口:颜色接口。抽象类和接口都包...原创 2019-02-01 17:04:14 · 160 阅读 · 0 评论 -
创建型模式1——简单工厂模式
模式的定义原创 2019-02-01 16:58:53 · 240 阅读 · 0 评论 -
设计模式4——动态代理模式
动态代理定义在程序运行时,通过反射机制动态地创建一个代理类。动态代理的几点注意:动态代理的体现:程序开始执行时是没有代理类的,在程序运行时,java利用反射机制动态生成代理类的实例。jdk技术支持:java在java.lang.reflect包中提供一个类和一个接口帮助我们创建和使用代理类实例,类是:Proxy类,接口是invocationHandler接口。两种代理类的模式区别...原创 2019-02-01 16:54:32 · 138 阅读 · 0 评论 -
设计模式1——Iterator迭代器模式
1. Iterator模式出现的目的Iterator模式用于在数据集合中按照顺序遍历集合,客户端不需要维护遍历集合的“指针”,遍历的信息都交由Iterator处理。每一种集合类型返回的Iterator具体类型可能不同,但是他们都实现了Iterator接口,因此客户端只需要得到Iterator接口就可以了,而不需要知道返回的具体是哪种Iterator接口。如:Array返回的是ArrayIt原创 2018-02-05 17:59:12 · 246 阅读 · 0 评论 -
【设计模式】设计模式综述
Java设计模式的六大设计原则单一职责原则里氏替换原则依赖倒置原则接口隔离原则迪米特法则开闭原则设计模式的分类标准 创建型模式:这个设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是通过new运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活,可以解耦对象实例化过程(对象怎么来) 结构型模式:这些设计模式关注类和对原创 2018-01-19 14:10:50 · 219 阅读 · 0 评论