学习JAVA快3个月了,感受了解的东西少之又少,用了几天时间看了一点设计模式方面的知识,经过本身的理解写了几个,但愿理解的八九不离十,我列举几个本身写的例子程序员
设计场景设计方法都写在里面,就很少作介绍了设计模式
静态代理设计模式:
分清楚各个角色之间的关系:
客户-代理对象-真实对象架构
静态代理设计场景:
1,客户张三要经过海外代购买一双耐克男士的41码鞋子,张三确定去不了,因此经过寻找代理去帮他买
这里的张三就是客户,也就是发起请求的一方
2,代理获得张三的信息以后,去往海外为他购买他须要的鞋子
这里的代理就是获得张三请求的一方
3,真实对象就是海外的耐克鞋店
这里的真实对象就是实现请求的一方,也称之为真实对象,也就是从这里可以获得张三所需求的鞋子学习
设计:
客户类 Client(张三):调用对代理类的方法获得鞋子
代理类proxyProple:从鞋子店获得找到符合张三要求的鞋子而且代替张三先购买下来
鞋子接口:(由于鞋子款式尺码有不少列举了3种)1,尺码。2,推荐性别,3,鞋子类型
鞋子实现:给了2种鞋子供参考 鞋子1 (耐克 41 码 男士 boost)和 鞋子2(耐克 42码 女士 air max)测试
类与类之间的关系:
鞋子类实现鞋子接口给出此款鞋子的特色
代理类经过获得鞋子信息方法,将传入的鞋子接口的方法调用设计
总结:其实不算完整,给张三的其实应该是张三直接所需求的鞋子,这里只是将鞋子的信息给了张三
目的是为了了解这之间的过程3d
下面是代码:代理
运行结果server
上面就是我对静态代理的理解,可能还有不少错误和不足的地方,就等到之后本身去完善了对象
策略设计模式:
为了让代码有复用性,避免一次性代码,使总体的耦合度下降
策略设计模式基本设计方法:
1,灵活的运用继承
2,灵活运用接口
继承的优势:增长代码的复用性
缺点:耦合度高,一旦超类添加了一个新方法,子类都会拥有此方法,超类修改了此方法的时候,子类须要批量修改,增长了代码量
子类继承超类以后,就没法继承其余类
接口的优势:将须要实现的类的方法封装,解决了高耦合度的问题
缺点:不可以达到代码复用
策略模式:解决接口不能达到代码复用的缺点
策略设计模式场景:
有一个狗类(超类):
子类统一的行为:吃食物
狗能叫:旺旺叫,叽叽叫
狗能跑:跑的快,跑的慢
用策略设计模式使得这个狗类更具备扩展性
黄狗:跑的快,旺旺叫
白狗:跑的慢,叽叽叫
总结:
策略设计模式应用的不少,下降了耦合度,使得代码复用性更高,多个接口的建立,松了耦合,接口都有本身的实现类提升了内聚
每个都对各层互不影响
下面是代码
运行结果:
观察者设计模式:
应用很是普遍的一种设计模式
功能:
为每个用户都提供了一个监听,当有事件触发时,将信息传达给每个监听着的用户
观察者模式场景:
相似于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个用户都将收到此消息
责任链场景:程序设计
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等级结果:
这些存粹是我本身的理解,慢慢学习以后确定会有更好的方法来解决。