个人网站如何被百度收录,临沂森拓网络科技有限公司,乡林建设集团官方网站,网络营销成功的案例###############
先弄清楚类模型的关系
###############
万物的抽象关系
###############
1.组合 composition实菱形 实线 无填充箭头整体与部分的关系同生共死代码体现#xff1a;成员变量如#xff1a;生命体与器官#xff0c;http请求#xff08;请求行#xff0c;请求…###############
先弄清楚类模型的关系
###############
万物的抽象关系
###############
1.组合 composition实菱形 实线 无填充箭头整体与部分的关系同生共死代码体现成员变量如生命体与器官http请求请求行请求头请求体教室黑板、桌椅等班级学生、老师等
2.聚合 aggregation空菱形 实线 无填充箭头整体与部分关系可独立存货代码体现成员变量比组合的关系弱如手机与手机零件比如摄像头
3.关联 association实线 无填充箭头是一种个体与个体关系也可以是一种拥有关系弱关系可以是单向也可以是双向还可以是自关联代码体现成员变量如老师与学生学生与课程夫妻单身汉
4.泛化 generalization实线 空心箭头是一种继承、抽象关系代码体现继承如动物分为很多种手机可分为很多种
5.实现 realization虚线 空心箭头是一种抽象到具体的关系类与接口的关系代码体现impl如人会说话、猫会叫
6.依赖 dependency虚线 无填充箭头是一种使用关系代码体现局部变量方法调用如人需要呼吸那就依赖于空气人需要喝水那就依赖于水###############六大设计原则###############
1.开闭原则对扩展开发 对修改关闭用抽象构建框架 用实现扩展细节
2.依赖倒置高层模块不应该依赖底层模块他们应该依赖其抽象
3.单一职责不要存在多于一个导致类变更的原因一个接口/类应当只负责一项职责
4.接口隔离不要用一个总接口用多个接口进行功能隔离
5.迪米特法则最少知道原则既一个对象应当对其他对象尽量少的知道降低耦合
6.里氏替换一个引用了基类的地方都必须能透明化的替换成它的子类#######################################强弱关系
泛化实现 组合 聚合 关联 依赖############结构模式##############
1.适配器模式将接口的功能转换成另一种接口表示在不改变原接口的前提下扩充了能力以及兼容性比如一个上层业务已经存在一个接口但是另一个业务需要改动为了不改变原接口的功能用适配器模式可以做到兼容。目的是为了改变接口功能
2.装饰器模式动态的将功能附加到对象上它比继承更有弹性同种类型的单方功能组合和扩充增强区分装饰者附加和被装饰者原始他们都有一个共同的超类目的是为了单方面的增强功能
3.代理模式有些服务不能直接访问或者有安全控制为了解决这个问题使用代理模式。他解决的是控制问题
4.外观模式隐藏系统的复杂度向客户端提供一个可以访问的接口门面角色子系统角色客户角色从规约上讲系统方法应当是功能单一的而使用单一功能方法组合的时候是复杂的那么久需要一个统一的入口来组合这个复杂的过程这个接口方法就是外观模式的体现
5.桥接模式将抽象部分和它的实现分离使他们能够独立变化重点在于分离与独立变化类爆炸如不同的实现都得创建类那我们能不能将实现分离手机样式有很多种不能因为样式变化我们就要创建一个手机类手机类是固定的但是它锁含的样式是可以变化的由原来的样式-手机的关系转变为手机-样式的关系 手机抽象 样式抽象 手机抽象包含样式的抽象 各自实现 手机实现加入样式的实现取代多层继承
6.组合模式部分整体模式将对象组合成树形结构使得用户对单个对象和组合对象具有一致性的访问性并且可以适应通用类型的一并管理核心是层级相同的父类举例文件夹和文件继承同一个父类 他们有共同的访问方法
7.享元模式通过共享的方式高效的支持更多细粒度的对象当存在大量对象的时候可能会内存溢出我们把其中公共的部分抽取如果有相同的业务请求直接返回在内存中已有的对象避免重复创建对象。说白了就是抽取对象的共性由工厂创建成一个公共对象并且将这些公共对象放入内存全局map当需要对象的时候根据唯一值到这个map中获取注意一个问题公共对象也需要释放淘汰机制否则会溢出。
#########################################关系、行为模式##############
1.父类与子类关系1.策略模式将一系列的算法封装而这些封装算法可以随环境、业务随意替代切换并且他们的变化不会给客户端带来影响前提是他们实现的是相同的接口减少代码中的if。。。else。。。也许在选择某个实现的时候还是需要if else的 但是对于客户端而言是不需要去关注if else 这部分业务的2.模板方法模式抽象类定义一系列的算法骨架也就是实现的流程但不具体的实现将实现延迟到实现类中说白了就是先定义做一家事情的流程抽象方法的顺序执行但是不详细说明做的详情抽象方法的实现由子类自己决定比如父类定义做饭(洗菜 切菜 炒 装盘),做饭的流程是预先定义好的但是洗菜切菜等的具体方式是需要根据做什么饭才能决定的当做汤时我们需要洗什么 切什么 有做汤的实现类决定西红柿炒鸡蛋 切什么 洗什么 这个是由西红柿炒鸡蛋这个实现类决定的。
2.两个类之间1.观察者模式定义的对象间存在一种一队多的关系当一个对象的状态发生变化的时候其他依赖它对象都要得到通知并被自动更新一般适用于通知2.迭代子模式理解我们常用的Iteretor一般由一个迭代器接口规定其操作如hasnextnextremove等然后由具体子类来实现。通常用于顺序访问聚合对象的内部的各个对象而不需要暴露其内部表示这个聚合对象的内部结构内部结构指聚合对象的内部组成如list、数组等结构本来我们取聚合对象的时候是取其属性然后按数据类型来获取这个属性包含的各个对象迭代迭代子模式可以不需要暴露这个聚合对象的内部结构被next、hasnext等方法屏蔽3.责任链以链式处理方式来处理一组或多组不同类型的数据1.多个对象协同处理数据具体哪个对象能处理数据由由这些对象本身的业务划分专属领域来区分2.可动态的指定一组对象处理或动态的添加处理对象设置下一个处理对象。3.在不明确处理者的时候向多个处理者中的一个提交请求就是不确定哪个对象能处理被迫向链式处理结构提交数据最终由能处理的哪个对象处理这种情况不常见4.命令模式在一组操作中抽象出操作为命令比如开、关、重启、注销等一组命令由角色来区分职责调用-接受-具体命令-执行者他实现的是行为请求者与行为实现者的解耦而这个解耦的关键是命令接受者命令接受者作为中介接受命令的同时又可以调用具体命令执行抽象角色 命令调用者 命令管理者 命令抽象 具体命令 命令执行者命令管理者包含抽象命令具体命令管理者执行的时候不用管具体命令是啥只管执行具体命令包含命令执行者这样在命令发生变化的时候调用者不需要作出改变而只要命令执行者或者具体命令去更改有新增的命令只要扩充具体命令和执行者就行
3.类的状态1.备忘录模式又叫做快照模式,和日常中的存档类似在不破坏对象封装性的前提下捕获对象的内部状态并在该对象之外保存状态以便在以后能进行使用、恢复等常见的就是日志备份undolog回退等等发起人提供创建备忘录和恢复数据的功能实现其他业务可以访问备忘录的实际内容备忘录存储备忘录管理者对备忘录进行管理但不能访问备忘录的内容2.状态模式对象能够根据其状态自动的改变其行为允许对象状态改变时改变它的行为如视频播放播放、暂停、快进、快退等的状态切换 暂停不能快进state 抽象状态concretestate 实际状态context 环境角色 他包含了state
4.通过中间类1.访问者模式将作用于某种数据结构中的各个元素的操作分离出来封装成独立的对象使得其在不改变数据结构的前提下可以添加作用于这些元素新的操作为数据结构中的每个元素提供更多的访问方式元素和元素的操作分开抽象访问者 访问者抽象具体访问者 提供对元素的扩充访问方法抽象元素 结构中的元素具体元素 具体元素 针对性的方法对象结构 对象的聚合类型对象结构传入visitor元素接受访问者元素调用访问者方法访问者方法扩充对当前元素的操作方法2.中介者模式定义一个对象用于协调封装一系列对象的操作而这些对象之间没有耦合关系这些耦合关系被中介者处理。这个模式是迪米特法则最少知道的典型应用比较好理解就是中介把对象间要关联的操作和给做了3.解释器模式就是解释某些内容的含义比如sql解释器比较接近于底层用的比较少context 上下文 存入被解释的对象 解释的规则 创建一个非终结符的解释器抽象解释器 解释器的抽象父类非终结符解释器 中间解释器 可以有一个或多个 他可包含终结符解释器 一种类型的解释一般只与一种非终结符解释器对应 但一种类型的非终结符解释器可以包含多个终结符解释器 这和组合模式有点类似终结符解释器 最终解释器 发生真正的解释 不包含有其他解释器 一般一种规则对应一种终结符解释器一般流程创建上下文(填入共享数据和非终结符解释器 如被解释对象解释的规则等)-创建非终结符解释器构建这类的数据解释所需要的的终结符解释-调用非终结符解释器的解释方法-按规则调用终结符解释器的解释方法-终结符解释器按规则解释-返回结果