学习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等级结果:
这些存粹是我自己的理解,慢慢学习之后肯定会有更好的方法来解决。