bridge

java中桥接模式详解和使用方法

允我心安 提交于 2020-08-15 09:23:12
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。 我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象类方法但是不同的桥接实现类,来画出不同颜色的圆。 介绍 意图:将抽象部分与实现部分分离,使它们都可以独立的变化。 主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。 何时使用:实现系统可能有多个角度分类,每一种角度都可能变化。 如何解决:把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。 关键代码:抽象类依赖实现类。 应用实例: 1、猪八戒从天蓬元帅转世投胎到猪,转世投胎的机制将尘世划分为两个等级,即:灵魂和肉体,前者相当于抽象化,后者相当于实现化。生灵通过功能的委派,调用肉体对象的功能,使得生灵可以动态地选择。 2、墙上的开关,可以看到的开关是抽象的,不用管里面具体怎么实现的。 优点: 1、抽象和实现的分离。 2、优秀的扩展能力。 3、实现细节对客户透明。 缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。 使用场景:

华三IRF堆叠

时光怂恿深爱的人放手 提交于 2020-08-15 05:59:19
华三IRF堆叠: 华三IRF堆叠步骤: shutdown 用于IRF的端口 创建逻辑IRF端口,将两个物理端口与IRF端口绑定 undo shutdown 用于IRF的端口 修改将成为主设备的IRF优先级为31 保存后激活配置 SW2要把成员编号由1改为2,重启生效 IRF的domain ID可以不修改,默认是0 (两个端口一个端口都可以做,拓扑是一个端口) sy sy SW1 int range ten 1/0/49 to ten 1/0/50 shutdown irf-port 1/2 port group int ten 1/0/49 port group int ten 1/0/50 int range ten 1/0/49 to ten 1/0/50 undo shutdown irf member 1 priority 31 end sa irf-port-configuration active sy sy SW2 irf member 1 renumber 2 q reboot int range ten 2/0/49 to ten 2/0/50 shutdown irf-port 2/1 port group int ten 2/0/49 port group int ten 2/0/50 int range ten 2/0/49 to ten 2/0/50

设计模式-总揽

六眼飞鱼酱① 提交于 2020-08-15 03:28:36
Dessign Pattern Overview 目录 Dessign Pattern Overview Overview Core Concepts Design Principle Refactoring to Patterns GOF-23 Encapsulate Change Overview 在 软件工程 中, 设计模式 (design pattern)是对 软件设计 中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由 埃里希·伽玛 (Erich Gamma)等人在1990年代从 建筑设计 领域引入到 计算机科学 的。 设计模式并不直接用来完成 代码 的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。 面向对象 设计模式通常以 类别 或 对象 来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类别或对象。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。 引用自维基百科 Core Concepts 变化是复用的天敌,本质是找到变化,封装变化,提高可复用性 如果一个系统所有点都在变化或者一直不变,是不能用设计模式来解决的 Design Principle 依赖倒置原则(DIP) 高层模块(稳定)不应该依赖于低层模块(变化),二者都应当依赖于抽象(稳定) 抽象(稳定

关于c++设计模式的总结

流过昼夜 提交于 2020-08-15 02:47:13
抽象工厂,决定产品系列的产品的组合,特点是创建同一款式的产品系列。缺点是增加产品组件,需要修改抽象工厂接口,影响抽象工厂子类。 builder,决定产品的各个部分的build的过程。替换相应的builder子类,就可以修改产品相应的各个part部件的实现;替换相应的Director子类,就可以修改builder组件的调用顺序(即控制创建过程)。 工厂方法,产品子类和creator子类一 一对应。不直接调用FactoryMethod操作,定义了何时调用FactoryMethod。扩展相关子类可以修改此调用时间 Prototype,产品自身就是自己的creator Singleton,产生全局的单一实例 1)以上是创建型:创建型设计模式核心是通过替换直接调用new创建具体对象这种方式,从而去client代码和产品对象之间的耦合。client都是通过接口引用工厂,通过接口引用产品,所以替换更方便。 adapter,描述了client如何做到通过target接口,来使用Adaptee的操作函数。 bridge,“抽象接口定义”和“具体实现部分”分离。分离后,可以各自发展。 composite,从共同接口派生,使对单个对象和组合对象的使用具有一致性,并且支持递归组合。 Decorator,共同的父类,接口相同,可以透明的、递归的增加额外的职责。与composite区别是只有一个组件

如何更有效地说服开发人员接受你的BUG?

自闭症网瘾萝莉.ら 提交于 2020-08-14 16:34:19
把BBS的文章拿来总结一下。有的公司很正规,不需要测试直接同开发人员进行打交道。但是对于规模较小的项目团队或者处于起步阶段的公司里面的测试人员来说,与开发打交道是一件不可避免的事情。 当处于这种状况时,如何和开发打交道更多的是一个沟通的技巧。 超越自我says: 首先,要确保自己能重现BUG的过程;(要真正能模拟到该问题的存在) 其次,要将系统出现BUG给用户带来的影响要逐一解释和说明,让开发人员真正了解问题的所在,也节省开发人员的时间, 并分析系统存在瓶颈会引起更多问题, 再次,也要分析修改BUG后,将会带来什么问题,用户是否可接受?并要把修正BUG所引起的问题减少, 而不是增加另外的BUG,而通过自己对系统的熟悉程度,开发人员 也会对测试人员提交的BUG引起足够的关注度和重视,从而让BUG彻底解决, 最后,通过开发人员对BUG的修正,自己也进行一次回归测试,让开发人员觉得测试人员是对质量的负责,而不是针对开发人员,以便利于下一次问题的提交和修正! 总之:测试人员是对产品质量,而不是针对某一个人,而且也要把BUG及时提交,不要错过提交BUG的最佳时间, 因为BUG越不解决,积累的问题越多! 所以测试人员要对发现BUG要有信心和足够的时间重现BUG,让产品更具有质量性! maguschen says: 1.把自己的Bug Report完善;有时候开发看到一些莫名其妙的Bug

史上最详细的Linux网卡ifcfg-eth0配置详解

半世苍凉 提交于 2020-08-14 08:36:26
通过查资料与工作中的进行一下总结: DEVICE="eth1" 网卡名称 NM_CONTROLLED="yes" network mamager的参数 ,是否可以由NNetwork Manager托管,建议设置成no HWADDR= MAC地址 TYPE=Ethernet 类型 PREFIX=24 子网掩码24位 DEFROUTE=yes 就是default route,是否把这个eth设置为默认路由 ONBOOT=yes 设置为yes,开机自动启用网络连接 IPADDR= IP地址 BOOTPROTO=none 设置为none禁止DHCP,设置为static启用静态IP地址,设置为dhcp开启DHCP服务 NETMASK=255.255.255.0 子网掩码 DNS1=8.8.8.8 第一个dns服务器 BROADCAST 广播 UUID 唯一标识 TYPE=Ethernet 网络类型为:Ethernet GATEWAY= 设置网关 DNS2=8.8.4.4 # 第二个dns服务器 IPV6INIT=no 禁止IPV6 USERCTL=no 是否允许非root用户控制该设备,设置为no,只能用root用户更改 NAME="System eth1" 这个就是个网络连接的名字 NETWORK 网络地址 ARPCHECK=yes 检测 PEERDNS

docker入门及常用命令

僤鯓⒐⒋嵵緔 提交于 2020-08-14 02:49:01
Dokcer 一、contos Docker 安装 (关闭 firewalld 及selinux) 1、卸载旧版本 # sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine 2、更新docker yum 源 不更新源,会默认安装老旧版docker # sudo yum install -y yum-utils # sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo 3、安装docker 需要安装三个软件 docker-ce docker-ce-cli containerd.io # sudo yum install docker-ce docker-ce-cli containerd.io 安装特定版本方式 :请在存储库中列出可用版本,然后选择并安装: 一个。列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序,并被截断: # yum list docker-ce -

设计模式概述

怎甘沉沦 提交于 2020-08-14 01:28:13
一、定义   设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是 为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 二、产生背景   肯特·贝克和沃德·坎宁安在1987年利用克里斯托佛·亚历山大在建筑设计领域里的思想开发了设计模式并把此思想应用在Smalltalk中的图形用户接口的生成中。一年后Erich Gamma在他的苏黎世大学博士毕业论文中开始尝试把这种思想改写为适用于软件开发。与此同时James Coplien 在1989年至1991 年也在利用相同的思想致力于C++的开发,而后于1991年发表了他的著作Advanced C++ Idioms。就在这一年Erich Gamma 得到了博士学位,然后去了美国,在那与Richard Helm, Ralph Johnson ,John Vlissides合作出版了Design Patterns - Elements of Reusable Object-Oriented Software 一书,在此书中共收录了23个设计模式。这四位作者在软件开发领域里也以他们的匿名著称Gang of Four(四人帮,简称GoF),并且是他们在此书中的协作导致了软件设计模式的突破。有时这个匿名GoF也会用于指代前面提到的那本书。 三、学习的意义   设计模式的本质是面向

Docker单机:FileBeat+ELK 日志收集

社会主义新天地 提交于 2020-08-13 17:04:56
参考链接: https://www.cnblogs.com/fbtop/p/11005469.html 目的: 线程请求生成对应的requestId,根据requestId追踪链路生产消费的数据,方便定位问题和回溯;基于一些XXX考虑,和阿巴阿巴阿巴的原因先拿FileBeat+ELK的方式进行实验,跑通日志收集和展示的功能。 为了避免重复造轮子,本篇只对上出链接博客做一些补充: 1.单机/docker/版本7.1.1; 2.docker四大网络的特点: https://www.cnblogs.com/zhuochong/p/10069293.html ;本次采用net=bridge的网络模式,禁止出现localhost 和127.0.0.1,统一使用本机ip(重要); 3.对docker -v挂载命令有所了解; 4.确认fileBeat是否采集到了日志:进入容器 [docker exec -i -t 容器号 bash] ,查看/var/log/nginx/下的日志文件即可;另外docker启动时可以去掉 -d 参数,观看启动运行日志,方便查看状态; 下载 curl -L -O https://raw.githubusercontent.com/elastic/beats/7.1/deploy/docker/filebeat.docker.yml时提示链接失败

KVM或Xen遇到Unable to retrieve http images/install.img

独自空忆成欢 提交于 2020-08-13 13:38:28
用virt-install安装kvm或xen,如果是用URL安装,会遇到这个问题: Unable to retrieve http://192.168.22.242/p_w_picpaths/install.img 或者 Unable to retrieve http://mirrors.sohu.com/centos/6.5/os/x86_64/p_w_picpaths/install.img 解决方法 1,首先启动httpd服务,打开iptables的80端口,保证页面能访问 2,检查ip转发是否开启 cat /etc/sysctl.conf |grep ip_forward net.ipv4.ip_forward = 1 如果没有开启,则 vim /etc/sysctl.conf net.ipv4.ip_forward = 1 /sbin/sysctl -p 3,查看网络 是否没有配置br0,只是yum安装的 # brctl show bridge namebridge idSTP enabledinterfaces virbr08000.feffffffffffyesvif4.0 cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0 cat /etc