【设计模式】7、桥接模式

桥接模式就是对一个类的方法进行抽象化,吧不相关的因素提取出来,发展出第二个类

 

 

 1 package com.shejimoshi.structural.Bridge;
 2 
 3 
 4 /**
 5  * 功能:桥接模式使用
 6  *       意图:将抽象部分与它的实现部分分离,使他们都可以独立的变化
 7  *     适用性:你不希望在抽象和它的实现部分之间有一个固定的绑定关系。
 8  *           类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充
 9  *         对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译
10  *         你想在多个对象间共享实现,但同时要求客户并不知道这一点
11  * 时间:2016年2月17日下午7:45:10
12  * 作者:cutter_point
13  */
14 public abstract class Systeml
15 {
16     //相应系统的软件
17     protected Soft soft;
18     
19     public abstract void using();
20     
21     public void installSoft(Soft soft)
22     {
23         this.soft = soft;
24     }
25 }

 

 1 package com.shejimoshi.structural.Bridge;
 2 
 3 
 4 /**
 5  * 功能:桥接模式使用
 6  *       意图:将抽象部分与它的实现部分分离,使他们都可以独立的变化
 7  *     适用性:你不希望在抽象和它的实现部分之间有一个固定的绑定关系。
 8  *           类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充
 9  *         对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译
10  *         你想在多个对象间共享实现,但同时要求客户并不知道这一点
11  * 时间:2016年2月17日下午7:54:12
12  * 作者:cutter_point
13  */
14 public class Window extends Systeml
15 {
16     //默认构造函数
17     public Window(){}
18     
19     public Window(Soft soft)
20     {
21         //给系统安装相应的软件
22         this.soft = soft;
23     }
24     
25     @Override
26     public void using()
27     {
28         System.out.print("Window 系统运行:");
29         soft.run();//系统运行相应的软件
30     }
31     
32 }

 

 1 package com.shejimoshi.structural.Bridge;
 2 
 3 
 4 /**
 5  * 功能:桥接模式使用
 6  *       意图:将抽象部分与它的实现部分分离,使他们都可以独立的变化
 7  *     适用性:你不希望在抽象和它的实现部分之间有一个固定的绑定关系。
 8  *           类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充
 9  *         对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译
10  *         你想在多个对象间共享实现,但同时要求客户并不知道这一点
11  * 时间:2016年2月17日下午7:57:12
12  * 作者:cutter_point
13  */
14 public class Linux extends Systeml
15 {
16     //默认构造函数
17     public Linux(){}
18     
19     public Linux(Soft soft)
20     {
21         //给系统安装相应的软件
22         this.soft = soft;
23     }
24     
25     @Override
26     public void using()
27     {
28         System.out.print("Linux 系统运行:");
29         soft.run();//系统运行相应的软件
30     }
31 
32 }

 

 1 package com.shejimoshi.structural.Bridge;
 2 
 3 
 4 /**
 5  * 功能:桥接模式使用
 6  *       意图:将抽象部分与它的实现部分分离,使他们都可以独立的变化
 7  *     适用性:你不希望在抽象和它的实现部分之间有一个固定的绑定关系。
 8  *           类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充
 9  *         对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译
10  *         你想在多个对象间共享实现,但同时要求客户并不知道这一点
11  * 时间:2016年2月17日下午7:52:58
12  * 作者:cutter_point
13  */
14 public interface Soft
15 {
16     public void run();
17 }

 

 1 package com.shejimoshi.structural.Bridge;
 2 
 3 
 4 /**
 5  * 功能:编译器
 6  * 时间:2016年2月17日下午7:58:17
 7  * 作者:cutter_point
 8  */
 9 public class Compiler implements Soft
10 {
11 
12     @Override
13     public void run()
14     {
15         System.out.println("运行编译器");
16     }
17 
18 }

 

 1 package com.shejimoshi.structural.Bridge;
 2 
 3 
 4 /**
 5  * 功能:浏览器
 6  * 时间:2016年2月17日下午8:00:09
 7  * 作者:cutter_point
 8  */
 9 public class Browser implements Soft
10 {
11 
12     @Override
13     public void run()
14     {
15         System.out.println("运行浏览器");
16     }
17 
18 }

 

 1 package com.shejimoshi.structural.Bridge;
 2 
 3 
 4 /**
 5  * 功能:测试桥接模式
 6  * 时间:2016年2月17日下午8:06:05
 7  * 作者:cutter_point
 8  */
 9 public class Test
10 {
11     public static void main(String[] args)
12     {
13         //我们的软件
14         Soft browser = new Browser();
15         Soft compiler = new Compiler();
16         
17         //我们在window系统上安装浏览器使用
18         Systeml win = new Window();
19         win.installSoft(browser);
20         win.using();
21         
22         System.out.println("===============================");
23         //Linux 上安装浏览器还要编译器
24         Systeml ubuntu = new Linux(browser);
25         ubuntu.using();
26         ubuntu.installSoft(compiler);
27         ubuntu.using();
28         
29     }
30 }

测试结果:

 

Window 系统运行:运行浏览器
===============================
Linux 系统运行:运行浏览器
Linux 系统运行:运行编译器

  

 

转载于:https://www.cnblogs.com/cutter-point/p/5196456.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hadoop HA 之 QJM

前言 本文主要通过对hadoop2.2.0集群配置的过程加以梳理,所有的步骤都是通过自己实际测试。文档的结构也是根据自己的实际情况而定,同时也会加入自己在实际过程遇到的问题。搭建环境过程不重要,重要点在于搭建过程中遇到的问题,解…

TeamViewer免费版和付费版有什么不同

提到远程控制软件 TeamViewer无疑是目前业内知名度比较高的一款,所以说到远程控制软件可能大部分人首先想到的就是TeamViewer。在使用功能上,它支持远程桌面控制、文件传输、远程计算机锁定、视频会话、主控方和被控方身份互换,远程管理无人执…

iOS-关于cell的重叠问题

记得很早之前遇到过一个问题,关于cell的重叠问题,现在回顾总结一下。 iOS中tableview的cell显示是会消耗内存的,如果要显示无数个cell,不可能把每个cell都存储下来,为了解决这个问题,cell就用了重用机制&am…

每天一个Linux命令-ls

ls 命令在linux系统中是使用频率最频繁的几个命令之一,直接使用不带目录名,是默认显示当前目录的文件及子目录名称,ls加指定目录名,则可以查看指定目录下的文件及子目录名称,ls不仅可以查看目录下有哪些文件和子目录,还…

halcon资料链接

本文转载自xiamentingtao,原文地址如下: http://blog.csdn.net/xiamentingtao/article/details/52583787 1目录(?)[]论坛培训博客文档书籍视频论坛、培训halcon学习网:http://www.ihalcon.com/鸟叔机器视觉:http://bbs.szvbt.com…

【代码笔记】iOS-翻书效果的实现

代码: RootViewController.m #import "RootViewController.h"interface RootViewController ()endimplementation RootViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {self [super initWithNibName:…

修改TFS与本地源代码映射路径

使用源代码管理资源管理器修改工作区 在“文件”菜单上单击“源代码管理”,再单击“工作区”。 在“管理工作区”对话框的“名称”列下,突出显示要修改的工作区,然后单击“编辑”。 在“编辑工作区”对话框中: 修改“名称”框中…

halcon基础知识

一、程序中的颜色: 绿色:注释 褐色:控制开发 浅蓝色:外部函数——HDevelop函数文件,可在所有Halcon程序中使用 深蓝色:图像获取和处理 紫色:内部函数——本地程序函数,只在当前程序使…

停止过度设计,开发客户需要的软件

在与许多不同的团队合作过之后,Greg Young发现大家做项目时经常会大幅度的过度设计。比如一个预计要开发9个月的项目,换个角度思考一下,却可能只需要几个星期就可以提交95%的功能。Young在最近伦敦举行的DDD eXchange大会上着重阐述了这一点。…

Halcon—Tuple中符号的含义

2014年08月08日 21:20:30阅读数:5429实例一(3d_coordinates.hdev):for I : 1 to NumImages by 1read_image (Image, calib/calib-3d-coord-I$02d)——C:\Program Files\MVTec\HALCON-10.0\images\的calib文件夹中开头是calib-3d-c…

如果我是博客园的产品经理【上】

题记 这是一个系列文章的第一篇 我打算写一个《如果我是XXX的产品经理》系列, 因为我是博客园的老用户了,这个系列又是写在博客园上的 所以先拿博客园开刀, 后面估计还会写QQ音乐,有道云笔记,github,foxmai…

Halcon学习笔记(三)---数据类型

Halcon学习笔记(三)---数据类型halcon只能在单独行进行注释,不能在语句后面进行注释。1、tuple(元组,重数)赋值符号“:”tuple算子:(1)变量定义与加减乘除运算代码如下:*…

论文笔记之:RATM: RECURRENT ATTENTIVE TRACKING MODEL

RATM: RECURRENT ATTENTIVE TRACKING MODEL ICLR 2016 本文主要内容是 结合 RNN 和 attention model 用来做目标跟踪。 其中模型的组成主要是: 1. an attention model 主要用来从输入图像中提取 patch; 2. RNN 用来预测 attention 参数,即&am…

【分享】WeX5的正确打开方式(5)——绑定机制

今天继续WeX5的绑定机制。 需求分析 记账本要实现的效果就是可以展示所有账单,还能实时动态编辑每一笔账单,官方案例的效果图如下: 展示页: 编辑页 个人觉得官方案例加入了许多元素,不熟悉的同学每一个点都很难理解&am…

HALCON常用算子(HALCON13.0)

HALCON常用算子(HALCON13.0)Chapter 9--Developdev_clear_window ( : : : )功能:清除活动图形窗口的内容dev_close_window ( : : : )功能:关闭活动图形窗口。dev_display ( Object : : : )功能:在现有图形窗口中显示图…

关于未捕获异常的处理(WPF)

转载自:http://www.cnblogs.com/chenxizhang/p/3280947.html 这一篇文章来谈谈对于WPF应用程序开发中的未捕获异常的处理。 首先,我们当然是要求应用程序开发人员,尽可能地在程序可能出现异常的地方都去捕捉异常,使用try…catch的…

设计模式--23、访问者模式

访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。例如处方单中的各种药品信息就是被访问的元素,而划价人…

C#串口SerialPort常用属性方法

SerialPort(): //属性 .BaudRate;获取或设置波特率 .BytesToRead;得到 接收到数据的字节数 .BytesToWrites;得到送往串口的字节数 .DataBits;获取或设置数据位 .IsOpen;获取一个值,判断串口是否打开 .Pariy;获取或设置校验位 .PortName;串口名称 .ReadBufferSize;获…

NTFS文件系统的简述

NTFS文件系统的设计思想基于稳定性、和安全性并支持大容量存储设备的文件系统:1.它提供日志可以增加文件系统的容错率,可以有效的保护系统的安全。NTFS是一个可恢复的文件系统。在NTFS分区上即使强制关机后,一般也不需要运行CHKDSK命令修复磁…

Rxjava基础

现在很多Android App的开发开始使用Rxjava,但是Rxjava以学习曲线陡峭著称,入门有些困难。经过一段时间的学习和使用,这里来介绍一下我对Rxjava的理解。 说到Rxjava首先需要了解的两个东西,一个是Observable(被观察者&a…