设计模式-组合模式
组合模式1.简介编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。
传统方法将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的实际上我们的要求是:在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系,因此这种方案,不能很好实现的管理的操作,比如对学院、系的添加,删除,遍历等解决方案:把学校、院、系都看做是组织结构,他们之间没有继承的关系,而是一个树形结构,可以更好的实现管理操作。=>组合模式
基本介绍
组合模式(Composite Pattern),又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以表示“整体-部分”的层次关系。
组合模式依据树形结构来组合对象,用来表示部分以及整体层次。
这种类型的设计模式属于结构型模式。
组合模式使得用户对单个对象和组合对象的访问具有一致性,即:组合能让客户以一致的方式处理个别对象以及组合对象
Component :这是组合中对象声明接口,在适当情况下,实现所有类共有的接口默认行为,用于访问和管理Compo ...
设计模式-装饰者模式
装饰者模式1.简介要求咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)调料: Milk、Soy(豆浆)、Chocolate要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便使用OO的来计算不同种类咖啡的费用:客户可以点单品咖啡,也可以单品咖啡+调料组合。
方案一
Drink是一个抽象类,表示饮料des 就是对咖啡的描述,比如咖啡的名字cost()方法就是计算费用,Drink类中做成一个抽象方法.Decaf 就是单品咖啡,继承 Drink,并实现costEspress && Milk就是单品咖啡+调料,这个组合很多
问题:这样设计,会有很多类,当我们增加一个单品咖啡,或者一个新的调料,类的数量就会倍增,就会出现类爆炸
方案二将调料内置Drink中
方案2-解决星巴克咖啡订单问题分析
1)方案2可以控制类的数量,不至于造成很多的类2)在增加或者删除调料种类时,代码的维护量很大3)考虑到用户可以添加多份调料时,可以将 hasMilk返回一个对应int4)考虑使用装饰者模式
装饰 ...
设计模式-桥接模式
桥接模式现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网,打电话等),
1.简介
扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加一个手机品牌,也要在各个手机样式类下增加。
违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本.
解决方案-使用桥接模式
桥接模式(Bridge)-基本介绍基本介绍
桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。是一种结构型设计模式Bridge模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展
Client类:桥接模式的调用者
抽象类(Abstraction) :维护了lmplementor/即它的实现类ConcretelmplementorA…二者是聚合关系, Abstraction充当桥接类
RefinedA ...
设计模式--适配器模式
适配器模式1.简介适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)适配器模式属于结构型模式主要分为三类:类适配器模式、对象适配器模式、接口适配器模式
工作原理
适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容
从用户的角度看不到被适配者,是解耦的
用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口方法
用户收到反馈结果,感觉只是和目标接口交互
2.类适配器模式基本介绍: Adapter类,通过继承src类,实现dst类接口,完成src->dst的适配。
类适配器模式应用实例以生活中充电器的例子来讲解适配器,充电器本身相当于Adapter,220V交流电相当于src(即被适配者)的目dst(即目标)是5V直流电
123456789//被适配的类public class Voltage220V { //输出220V电压 public int output220V(){ ...
设计模式--建造者模式
建造者模式1.需求需要建房子:这一过程为打桩、砌墙、封顶房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的.
传统模式
设计的程序结构,过于简单,没有设计缓存层对象,程序的扩展和维护不好.也就是说,这种设计方案,把产品(即:房子)和创建产品的过程(即:建房子流程)封装在一起,耦合性增强了。
解决方案:将产品和产品建造过程解耦→建造者模式.
2.建造者模式基本介绍建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。
四个角色Product(产品角色):一个具体的产品对象。Builder(抽象建造者):创建一个Product对象的各个部件指定的接口/抽象类。ConcreteBuilder(具体建造者):实现接口,构建和装配各个部件。Director〈指挥者):构建一个使用Builder接口的对 ...
设计模式-原型模式
原型模式现在有一只羊,姓名为:tom,年龄为:1,颜色为:白色,请创建和tom羊属性完全相同的10只羊。
1234567@Data@AllArgsConstructorpublic class Sheep { private String name; private int age; private String color;}
传统的方式的优缺点:
优点是比较好理解,简单易操作。
在创建新的对象时,总是需要重新获取原始对象的属性,如果创建的对象比较复杂时,效率较低
总是需要重新初始化对象,而不是动态地获得对象运行时的状态,不够灵活
改进的思路分析
思路: Java 中 Object类是所有类的根类,Object类提供了一个clone()方法,该方法可以将一个Java对象复制一份,但是需要实现clone的Java类必须要实现一个接口Cloneable,该接口表示该类能够复制且具有复制的能力→原型模式
1.基本介绍
原型模式(Prototype模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象
原型模式是一 ...
Hadoop
一、Hadoop入门1.1 Hadoop 是什么
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
主要解决,海量数据的存储和海量数据的分析计算问题。
广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈。
1.2 Hadoop 三大发行版本Hadoop 三大发行版本:Apache、Cloudera、Hortonworks。
Apache 版本最原始(最基础)的版本,对于入门学习最好。2006
Cloudera 内部集成了很多大数据框架,对应产品 CDH。2008
Hortonworks 文档较好,对应产品 HDP。2011
Hortonworks 现在已经被 Cloudera 公司收购,推出新的品牌 CDP。
Apache Hadoop官网地址:http://hadoop.apache.org
下载地址:https://hadoop.apache.org/releases.html
Cloudera Hadoop官网地址:https://www.cloudera.com/downloads/cdh
下载地址:https://docs.cloud ...
component注解与Configuration的理解
https://blog.csdn.net/baidu_41634343/article/details/95176401
configuration和component之间的区别@Component注解的范围最广,所有类都可以注解,但是@Configuration注解一般注解在这样的类上:这个类里面有@Value注解的成员变量和@Bean注解的方法,就是一个配置类。
从定义来看,@Configuration 注解本质上还是@Component,因此context:component-scan/ 或者 @ComponentScan都能处理@Configuration注解的类。
@Configuration标记的类必须符合下面的要求:
配置类必须以类的形式提供(不能是工厂方法返回的实例),允许通过生成子类在运行时增强(cglib 动态代理)。 配置类不能是 final 类(没法动态代理)。 配置注解通常为了通过 @Bean 注解生成 Spring 容器管理的类, 配置类必须是非本地的(即不能在方法中声明,不能是 private)。 任何嵌套配置类都必须声明为static。 @Bean 方 ...
ActiveMQ
一. 初步安装使用 ActiveMQ 的官网 : http://activemq.apache.org
ActiveMQ
API 接受发送MQ 的高可用MQ 的集群容错配置MQ 的持久化延时发送/定时投递签收机制Spring/SpringBoot 整合
1.为什么要使用 MQ ?微服务架构后链式调用是我们在写程序时候的一般流程,为了完成一个整体功能会将其拆分成多个函数(或子模块),比如模块A调用模块B,模块B调用模块C,模块C调用模块D。但在大型分布式应用中,系统间的RPC交互繁杂,一个功能背后要调用上百个接口并非不可能,从单机架构过渡到分布式微服务架构的通例,
系统之间接口耦合比较严重
每新增一个下游功能,都要对上游的相关接口进行改造;举个例子:如果系统A要发送数据给系统B和系统C,发送给每个系统的数据可能有差异,因此系统A对要发送给每个系统的数据进行了组装,然后逐一发送;当代码上线后又新增了一个需求:把数据也发送给D,新上了一个D系统也要接受A系统的数据,此时就需要修改A系统,让他感知到D系统的存在,同时把数据处理好再给D。在这个过程你会看到,每接入一个下游系统 ...
SpringCloud
一、SpringCloud简介SpringCloud 是微服务一站式服务解决方案,微服务全家桶。它是微服务开发的主流技术栈。它采用了名称,而非数字版本号。
springCloud 和 springCloud Alibaba 目前是最主流的微服务框架组合。
1.1 版本选择springboot版本选择12git源码地址https://github.com/spring-projects/spring-boot/releases/
强烈建议升级2.x
springcloud版本选择12345git源码地址https://github.com/spring-projects/spring-cloudhttps://spring.io/projects/spring-cloud更详细的选择https://start.spring.io/actuator/info
本次使用1234567cloud Hoxton.SR1boot 2.2.2.RELEASEcloud alibaba 2.1.0.RELEASEjava java8Maven 3.5以上Mysql 5.7及以上
1 ...