
设计模式
618GLOAL_COOK2237
未来由你选择!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
18、访问者模式
【例】给宠物喂食现在养宠物的人特别多,我们就以这个为例,当然宠物还分为狗,猫等,要给宠物喂食的话,主人可以喂,其他人也可以喂食。访问者角色:给宠物喂食的人具体访问者角色:主人、其他人抽象元素角色:动物抽象类具体元素角色:宠物狗、宠物猫结构对象角色:主人家//抽象元素角色类public interface Animal { //接受访问者访问的功能 void accept(Person person);}//抽象访问者角色类public interface Per.原创 2021-09-06 13:17:51 · 161 阅读 · 0 评论 -
17、迭代器模式
定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示【例】定义一个可以存储学生对象的容器对象,将遍历该容器的功能交由迭代器实现,涉及到的类如下:public class Student { public Student(String name, String number) { this.name = name; this.number = number; } private String name; pri原创 2021-09-06 11:18:20 · 117 阅读 · 0 评论 -
16、中介者模式
【例】租房现在租房基本都是通过房屋中介,房主将房屋托管给房屋中介,而租房者从房屋中介获取房屋信息。房屋中介充当租房者与房屋所有者之间的中介者。类图如下://抽象中介者类public abstract class Mediator { public abstract void constact(String message,Person person);}//抽象同事类public abstract class Person { protected String name..原创 2021-09-06 09:09:33 · 176 阅读 · 0 评论 -
15、责任链模式
6.4.3 案例实现现需要开发一个请假流程控制系统。请假一天以下的假只需要小组长同意即可;请假1天到3天的假还需要部门经理同意;请求3天到7天还需要总经理同意才行。类图如下//请假条类public class LeaveRequest { private String name; //请假天数 private int num; //原因 private String content; public LeaveRequest(String name..原创 2021-09-05 09:40:14 · 131 阅读 · 0 评论 -
14、命令模式
public class Order { //餐桌号码 private int diningTable; //所下的餐品及份数 private Map<String,Integer> foodDir=new HashMap<String,Integer>(); public int getDiningTable() { return diningTable; } public void setDini...原创 2021-09-04 10:30:43 · 119 阅读 · 0 评论 -
12、模板方法模式
就是把不确定的方法定义为抽象方法,让子类实现,顺序定义为模板方法案例:【例】炒菜炒菜的步骤是固定的,分为倒油、热油、倒蔬菜、倒调料品、翻炒等步骤。现通过模板方法模式来用代码模拟。类图如下:public abstract class AbstractClass { //模板方法 就是放顺序 //为防止恶意操作,一般模板方法都加上 final 关键词。 public final void cookProcess(){ pourOil(); ..原创 2021-09-04 09:15:23 · 221 阅读 · 0 评论 -
11、享元模式
先来看类图://抽象享元角色public abstract class AbstractBox { //获取图形的方法 public abstract String getShape(); //显示图形及颜色 public void display(String color){ System.out.println("方块形状: "+getShape()+",颜色为:"+color); }}//G图形类(具体享元角色)public...原创 2021-09-03 16:38:46 · 136 阅读 · 0 评论 -
10、组合模式
1、概述2、结构组合模式主要包含三种角色:抽象根节点(Component):定义系统各层次对象的共有方法和属性,可以预先定义一些默认行为和属性。树枝节点(Composite):定义树枝节点的行为,存储子节点,组合树枝节点和叶子节点形成一个树形结构。叶子节点(Leaf):叶子节点对象,其下再无分支,是系统层次遍历的最小单位。3、软件菜单例子如下图,我们在访问别的一些管理系统时,经常可以看到类似的菜单。一个菜单可以包含菜单项(菜单项是指不再包含其他内容的菜单条目),也可以包含带有其他菜单项原创 2021-09-03 09:33:33 · 138 阅读 · 0 评论 -
9、外观模式
1、概述有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就有许多的基金,它将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于股票、债券、外汇等领域,而基金投资的收益归持有者所有,管理机构收取一定比例的托管管理费用。定义:外观模式又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不原创 2021-09-01 19:47:53 · 119 阅读 · 0 评论 -
9、桥接模式
现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系://视频文件 实现化角色public interface VideoFile { void decode(String filename);}//实现化角色1public class AviFile implements VideoFile { @Override public void decode(String filename) {原创 2021-09-01 19:01:23 · 125 阅读 · 0 评论 -
7、适配者模式
如果去欧洲国家去旅游的话,他们的插座如下图最左边,是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑,手机在当地不能直接充电。所以就需要一个插座转换器,转换器第1面插入当地的插座,第2面供我们充电,这样使得我们的插头在当地能使用。生活中这样的例子很多,手机充电器(将220v转换为5v的电压),读卡器等,其实就是使用到了适配器模式。1、适配者模式定义:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类适配器模式和对象适配原创 2021-08-30 20:59:27 · 297 阅读 · 0 评论 -
6.3 CGLIB动态代理,三种代理模式对比和优缺点
先看下还是哪个一篇的动态代理:https://blog.csdn.net/GLOAL_COOK/article/details/119982949 <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2.2</version>原创 2021-08-30 20:16:03 · 606 阅读 · 0 评论 -
6.2、JDK动态代理
先看一下什么是静态代理:https://blog.csdn.net/GLOAL_COOK/article/details/117065944接下来我们使用动态代理实现上面案例,先说说JDK提供的动态代理。Java中提供了一个动态代理类Proxy,Proxy并不是我们上述所说的代理对象的类,而是提供了一个创建代理对象的静态方法(newProxyInstance方法)来获取代理对象。//售票接口public interface SellTickets { void sell();}//目标原创 2021-08-29 19:42:08 · 174 阅读 · 1 评论 -
5、建造者模式、工厂模式与建造者模式对比
1.概念建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象 。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节 。2、结构3、例子//自行车类 产品类public class Bike { private String frame; private String seat; public String getSeat() { return seat; } public void setS原创 2021-08-28 11:17:42 · 200 阅读 · 0 评论 -
黑马设计模式概念、类关系、七大原则
二、类关系(1)关联关系分为单向关联(一方持有成员变量)、双向关联(双方持有对方的成员变量)、自关联(自己持有自己的成员变量)(2)聚合关系空心菱形作为成员变量的形式(3)组合关系实心菱形作为成员变量的形式(4) 依赖关系虚线箭头作为参数、或者局部变量传递(5)继承(泛化)关系实线空心三角形(6)实现关系虚线三角形三、七大原则(1)开闭原则(2)里氏代换原则(3)依赖倒转原则(4)接口隔离原则接口隔离原则:客户端不应该被迫依赖于它不使用.原创 2021-08-28 09:59:26 · 272 阅读 · 0 评论 -
13 策略模式~
package com.yuan.shu.c12;/** * @author QLBF * @version 1.0 * @date 2021/7/19 21:02 */interface Light{ //定义规则 void relu();}//1.交通灯无导向-第一题class RedLight implements Light{ @Override public void relu() { System.out.println...原创 2021-07-20 10:52:00 · 139 阅读 · 1 评论 -
8、装饰者模式
用装饰者模式前:代码如下:package com.yuan;/** * @author QLBF * @version 1.0 * @date 2021/6/4 20:58 *///1.快餐抽象类(抽象构件(Component)角色)abstract class FastFood{ private float price; //描述 private String desc; //定义获取价格的抽象方法,因为要统计金额,不能写死,所以要抽象 p原创 2021-06-04 21:33:57 · 90 阅读 · 0 评论 -
Spring用了哪些设计模式
Spring用了哪些设计模式:https://github.com/Snailclimb/JavaGuide/blob/master/docs/system-design/framework/spring/Spring-Design-Patterns.md原创 2021-06-04 19:44:44 · 93 阅读 · 0 评论 -
观察者模式(订阅者模式)
package com.yuan;import java.util.ArrayList;import java.util.List;/** * @author QLBF 观察者模式演示 * @version 1.0 * @date 2021/6/4 16:47 *///1.定义抽象主题接口,提供了attach、detach、notify三个方法interface Subject{ //增加订阅者(观察者)就是WeixinUser public void att...原创 2021-06-04 17:04:37 · 174 阅读 · 0 评论 -
适配器模式
用对象适配器好过类适配器1.类适配器package com.yuan;import sun.nio.ch.Net;/** * @author QLBF 演示适配器模式 * @version 1.0 * @date 2021/5/28 19:23 *///要被适配的类:网线class Adaptee{ public void request(){ System.out.println("连接网线上网"); }}//接口转换器的抽象实现~int...转载 2021-05-28 19:50:21 · 139 阅读 · 0 评论 -
4、原型模式
spring bean就用了:原型模式如果某个对象的创建过程太复杂了,如果下次还要要这个对象,就不用new了,用我们的原型模式(浅拷贝或者深拷贝)原型就是Video类客户端Bilili为要克隆Video的类原型类:1.要实现一个接口Cloneable2.要重写一个方法clone()1.浅拷贝就是复制出来的对象指向原来对象那里package com.yuan;import java.util.Date;/** * @author QLBF 原型模式 * @version 1原创 2021-05-25 21:23:29 · 94 阅读 · 0 评论 -
3、抽象工厂模式
package com.yuan;/** * @author QLBF * @version 1.0 * @date 2021/5/24 15:13 */abstract class TV{ abstract void play();}class MediaTV extends TV{ @Override void play() { System.out.println("美的电视"); }}class HaierTV extends.转载 2021-05-24 15:38:21 · 136 阅读 · 0 评论 -
2、工厂模式(简单工厂模式(静态工厂模式))、工厂方法模式
工厂模式分三种:1.简单工厂模式(静态工厂模式)package com.yuan;/** * @author QLBF * @version 1.0 * @date 2021/5/23 20:47 */abstract class Fruit{ abstract void plant();}class Apple extends Fruit{ @Override void plant() { System.out.println("种苹果"原创 2021-05-23 20:57:26 · 146 阅读 · 0 评论 -
1单例模式
单例模式有以下特点: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。1.饿汉式单例(线程安全)package com.single;/** * @author QLBF * @version 1.0 * @date 2021/5/22 20:35 *///饿汉式单利public class Hungry { private byte[] data1=new byte[1024*1024]; pri原创 2021-05-23 10:16:04 · 159 阅读 · 0 评论 -
6.1、静态代理
package com.bingfa;/** * @author QLBF * @version 1.0 * @date 2021/5/20 10:09 *//* 静态代理模式总结: 真实对象和代理对象都要实现同一个接口 代理对象要代理真实角色 好处: 代理对象可以做很多真实对象做不了的事情 真实对象专注做自己的事情*///1.都要实现的接口interface Marry{ void happyMarry();}.原创 2021-05-20 10:31:45 · 218 阅读 · 0 评论 -
KS设计模式笔记
原创 2021-03-04 23:16:44 · 246 阅读 · 1 评论 -
AOP底层、AOP的动态代理技术、jdk动态代理、cglib 的动态代理
一、AOP 的底层实现实际上,AOP 的底层是通过 Spring 提供的的动态代理技术实现的。在运行期间,Spring通过动态代理技术动态 的生成代理对象,代理对象方法执行时进行增强功能的介入,在去调用目标对象的方法,从而完成功能的增强二、AOP的动态代理技术(2种)...原创 2021-01-12 20:10:09 · 192 阅读 · 0 评论