【设计模式】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,一经查实,立即删除!

相关文章

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

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

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

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

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…

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…

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

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

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

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

『协议』XML-RPC 协议规格说明

为什么80%的码农都做不了架构师?>>> 这篇文章提供所有实现XML-RPC协议所需要的内容。 一览 XML-RPC是一个工作在因特网上的远端程序调用(Remote Procedure Calling)协议。 XML-RPC消息是一个HTTP-POST请求(Request&…

Qt之QLineEdit详解(附源码)

原博客地址:http://blog.csdn.net/liang19890820/article/details/52044639,感谢原作者总结和分享。 简述 QLineEdit是一个单行文本输入框。 QLineEdit允许用户输入和编辑单行纯文本,提供了很多有用的编辑功能,包括:撤…

C#json数据的序列化和反序列化(将数据转换为对象或对象集合)

引用 System.Runtime.Serialization.Json 转载于:https://www.cnblogs.com/a849788087/p/5645828.html

位图(bmp)文件格式分析

from:https://blog.csdn.net/qingchuwudi/article/details/25785307 位图(bmp)文件格式分析 作者:深蓝(由博主分享) 一、什么是位图 计算机能以位图和矢量图格式显示图像。 1、位图(Bitmap): 图像又称点阵图或光…

java 基本功 —— 内存相关

2019独角兽企业重金招聘Python工程师标准>>> 首先我们来说说内存,因为从内存的角度来出发来分析一些变量,引用或者对象的生命周期会更好理解一些。 java是一门编程语言,他跟C有什么不同呢?本质上,他们都是一…

DOM事件处理有三个阶段

DOM事件处理有三个阶段: 捕捉阶段(capture phase):从最上层元素,直到最下层(你点击的那个target)元素。路过的所有节点都可以捕捉到该事件。命中阶段(target phase)&…

客户端程序自动更新(升级)的方式

from:https://blog.csdn.net/woaitingting1985/article/details/72954652一、C/S自动更新原理C/S程序自动升级是一个很重要的功能,原理其实很简单,一般包含两个程序一个是主程序,也就是除了升级功能以外的程序,另一个就…

怎么用源程序把ChemDraw结构复制到Word文档

在学习化学过程中,不可避免的会接触到各种化学结构。这个时候就需要通过绘制化学结构来进行这方面的学习和传播。ChemDraw Professional 15就可以辅助完成这方面的工作。很多的用户朋友会通过选中后复制粘贴可以将ChemDraw结构复制到Word文档中,但这只是…

QT串口编程的相关类(QSerialPortInfo)

QT Serial Port相关的类只有两个QSerialPortInfo(#include<QSerialPortInfo>) 和QserialPort(#include<QSerialPort>) 先来介绍QSerialPortInfo 1&#xff1a;QSerialPortInfo(#include<QSerialPortInfo>) 该类是一个串口的辅助类类&#xff0c;提供主要是提…

用jquery写一个属于自己的音乐播放器

看到一个用css3实现的CD的动画&#xff0c;演示在这儿http://codepen.io/_kieran/pen/QNRmep 突然那我就想说给自己做一个音乐播放器吧&#xff0c;说做就做。演示在https://echolsx.github.io/music/ Github传送门&#xff1a;https://github.com/EchoLsx/music 主要代码&…

MySQL 性能监控 4 大指标

【编者按】本文作者为 John Matson&#xff0c;主要介绍 mysql 性能监控应该关注的 4 大指标。 文章系国内 ITOM 管理平台 OneAPM 编译呈现。 MySQL 是什么&#xff1f; MySQL 是现而今最流行的开源关系型数据库服务器。由 Oracle 所有&#xff0c;MySQL 提供了可以免费下载的社…

【深度相机系列四】深度相机原理揭秘--结构光(iPhone X 齐刘海原理)

from&#xff1a;https://blog.csdn.net/electech6/article/details/78707839导读 结构光法&#xff1a;为解决双目匹配问题而生 深度图效果&#xff1a;结构光vs.双目 投射图案的编码方式直接编码时分复用编码空分复用编码 Kinect1原理 iPhone X原深感相机是缩小版的更强大的K…