博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA自己理解的几种设计模式
阅读量:6823 次
发布时间:2019-06-26

本文共 2311 字,大约阅读时间需要 7 分钟。

学习JAVA快3个月了,感觉了解的东西少之又少,用了几天时间看了一点设计模式方面的知识,通过自己的理解写了几个,希望理解的八九不离十,我列举几个自己写的例子

设计场景设计方法都写在里面,就不多做介绍了

1,静态代理设计模式

静态代理设计模式:

分清楚各个角色之间的关系:
客户-代理对象-真实对象

静态代理设计场景:

1,客户张三要通过海外代购买一双耐克男士的41码鞋子,张三肯定去不了,所以通过寻找代理去帮他买
这里的张三就是客户,也就是发起请求的一方
2,代理得到张三的信息之后,去往海外为他购买他需要的鞋子
这里的代理就是得到张三请求的一方
3,真实对象就是海外的耐克鞋店
这里的真实对象就是实现请求的一方,也称之为真实对象,也就是从这里能够得到张三所需求的鞋子

设计:

客户类 Client(张三):调用对代理类的方法得到鞋子
代理类proxyProple:从鞋子店得到找到符合张三要求的鞋子并且代替张三先购买下来
鞋子接口:(因为鞋子款式尺码有很多列举了3种)1,尺码。2,推荐性别,3,鞋子类型
鞋子实现:给了2种鞋子供参考 鞋子1 (耐克 41 码 男士 boost)和 鞋子2(耐克 42码 女士 air max)

类与类之间的关系:

鞋子类实现鞋子接口给出此款鞋子的特点
代理类通过得到鞋子信息方法,将传入的鞋子接口的方法调用

总结:其实不算完整,给张三的其实应该是张三直接所需求的鞋子,这里只是将鞋子的信息给了张三

目的是为了了解这之间的过程

下面是代码:

 

 

 

 

运行结果

 上面就是我对静态代理的理解,可能还有很多错误和不足的地方,就等到以后自己去完善了

2,策略设计模式

策略设计模式:

为了让代码有复用性,避免一次性代码,使整体的耦合度降低

策略设计模式基本设计方法:

1,灵活的运用继承
2,灵活运用接口

继承的优点:增加代码的复用性

缺点:耦合度高,一旦超类添加了一个新方法,子类都会拥有此方法,超类修改了此方法的时候,子类需要批量修改,增加了代码量
子类继承超类之后,就无法继承其他类
接口的优点:将需要实现的类的方法封装,解决了高耦合度的问题
缺点:不能够达到代码复用

策略模式:解决接口不能达到代码复用的缺点

策略设计模式场景:

有一个狗类(超类):

子类统一的行为:吃食物
狗能叫:旺旺叫,叽叽叫
狗能跑:跑的快,跑的慢
用策略设计模式使得这个狗类更具有扩展性

黄狗:跑的快,旺旺叫

白狗:跑的慢,叽叽叫

总结:

策略设计模式应用的很多,降低了耦合度,使得代码复用性更高,多个接口的创建,松了耦合,接口都有自己的实现类提高了内聚
每一个都对各层互不影响

下面是代码

 

运行结果:

3,观察者模式

观察者设计模式:

应用非常广泛的一种设计模式
功能:
为每一个用户都提供了一个监听,当有事件触发时,将信息传达给每一个监听着的用户

观察者模式场景:

类似于QQ群消息或者公告
当一个用户发送一则消息,或者管理员发送一则公告的时候其他所有用户都能够收到
此时所有用户都是处于监听状态

设计:

2个角色:1,观察者,2,被观察者
这里观察者通常为用户,但是也免不了是其他应用之类的
被观察者这里就是消息

1,被观察者接口,3种抽象方法,注册(param:Oberver),移除(param:Observer),通知(param:null)

2,被观察者类 Message 成员变量:Message msg(消息) List<Oberver> observers
提供了 对用户的控制,注册 移除 通知,这是被观察者的功能的实现
3,观察者接口 Obersrver 提供了修改消息的功能,修改消息的时候就等同于发送消息
4,用户类,成员变量:name(姓名) 对观察者接口的方法实现

流程:

进来3个用户,但是并没有完成注册,此时建立一个被观察对象,将3个用户注册,此时3个用户就处于监听状态
一旦当消息被修改的时候,3个用户都将收到此消息

 

 

 

 4,责任链设计模式

责任链场景:程序设计

1,架构师对系统架构
2,高级工程师项目进行设计
3,项目经理对项目进行分配
4,程序员编写代码
--------------------------------------------------
需求:
项目分ABC三个等级,A等架构师需要5秒完成架构,B等架构师需要3秒,C等1秒
A等高级工程师需要3秒钟完成 B 2秒 C 1秒
项目经理A 3 ,B 2 ,C 1
程序员 A 5,B 3,C 1
---------------------------------------------------
责任链模式:
MainHanderChain 类:
此类包括其下面所有需要实现所有方法
但是每一个类只能实现它自己能够实现的方法。
--------------------------------------------------
补充:
当项目等级在A的时候需要架构师架构
当项目等级在B的时候架构师不参与,高级工程师参与第一项设计
当项目等级在C的时候架构师,高级工程师不参与,项目经理参与第一项设计

总结:

责任链能够有效的分配任务,提高效率,而且在通常设计中看不到是谁对任务进行了调度,这里用了4个人物为了直观的显示进行过程
能够动态的为不同的任务分配不同的类来进行

测试A等级结果:

测试B等级结果:

测试C等级结果:

这些存粹是我自己的理解,慢慢学习之后肯定会有更好的方法来解决。

转载于:https://www.cnblogs.com/xgj-java-study/p/7695172.html

你可能感兴趣的文章
[日常] Go语言圣经--示例: 并发的Clock服务习题
查看>>
SCUT个人整理的常见问题
查看>>
二十二、Command 命令模式
查看>>
HDU Just a Hook
查看>>
什么是webpack?
查看>>
20165206学习基础和C语言基础调查
查看>>
httpclient的几种请求URL的方式
查看>>
UIImageView动画 UISlider控制速度
查看>>
JAVA自学笔记08
查看>>
C/C++——strcpy函数的实现
查看>>
KMP算法
查看>>
leetcode------Symmetric Tree
查看>>
spring声明式事务 同一类内方法调用事务失效
查看>>
C# 利用ICSharpCode.SharpZipLib实现在线加密压缩和解密解压缩
查看>>
zookeeper项目使用几点小结
查看>>
杂物论第一 中华文明的根基
查看>>
c#中 枚举类型的使用(转)
查看>>
linux应用之tomcat的安装及配置(centos)
查看>>
bytes与str
查看>>
转:Socket原理与编程基础
查看>>