桥接模式代码实现
- 某软件公司要开发一个跨平台图像浏览系统。
实例说明:要求该系统能够显示BMP、JPG、GIF、PNG等多种格式的文件,并且能够在Windows、Linux、UNIX等多个操作系统上运行。系统首先将各种格式的文件解析为像素矩阵(Matrix),然后将像素矩阵显示在屏幕上,在不同的操作系统中可调用不同的绘制函数来绘制像素矩阵。另外,系统需具有较好的扩展性,以便在将来支持新的文件格式和操作系统。试使用桥接模式设计该跨平台图像浏览系统。
- 类图:

- . 源代码:
package com.fish.pattern.bridge;
public class Matrix {
}
package com.fish.pattern.bridge;
public class JPGImage extends Image {
public void parseFile(String fileName) {
Matrix m = new Matrix();
imp.doPaint(m);
System.out.println(fileName + ",格式为JPG。");
}
}
package com.fish.pattern.bridge;
public class PNGImage extends Image {
public void parseFile(String fileName) {
Matrix m = new Matrix();
imp.doPaint(m);
System.out.println(fileName + ",格式为PNG。");
}
}
package com.fish.pattern.bridge;
public class GIFImage extends Image {
public void parseFile(String fileName) {
Matrix m = new Matrix();
imp.doPaint(m);
System.out.println(fileName + ",格式为GIF。");
}
}
package com.fish.pattern.bridge;
public class BMPImage extends Image {
public void parseFile(String fileName) {
Matrix m = new Matrix();
imp.doPaint(m);
System.out.println(fileName + ",格式为BMP。");
}
}
package com.fish.pattern.bridge;
public class WindowsImp implements ImageImp {
public void doPaint(Matrix m) {
System.out.print("在Windows操作系统中显示图像:");
}
}
package com.fish.pattern.bridge;
public class LinuxImp implements ImageImp {
public void doPaint(Matrix m) {
System.out.print("在Linux操作系统中显示图像:");
}
}
package com.fish.pattern.bridge;
public class UnixImp implements ImageImp {
public void doPaint(Matrix m) {
System.out.print("在Unix操作系统中显示图像:");
}
}
package com.fish.pattern.bridge;
public abstract class Image {
protected ImageImp imp;
public void setImageImp(ImageImp imp) {
this.imp = imp;
}
public abstract void parseFile(String fileName);
}
package com.fish.pattern.bridge;
public interface ImageImp {
public void doPaint(Matrix m);
}
package com.fish.pattern.bridge;
public class Client {
public static void main(String args[]) {
Image image;
ImageImp imp;
image = new JPGImage();
imp = new WindowsImp();
image.setImageImp(imp);
image.parseFile("小龙女");
}
}
- 运行结果:

代理模式代码实现
- 某软件公司开发收费商务信息查询系统。
实例说明:系统基本需求是:在进行商务信息查询之前用户需要通过身份验证,只有合法用户才能够使用该查询系统; 在进行商务信息查询时系统需要记录查询日志,以便根据查询次数收取查询费用。该公司开发人员已完成了商务信息查询模块的开发任务,现希望能够以一种松耦合的方式向原有系统增加身份验证和日志记录功能,客户端代码可以无区别地对待原始的商务信息查询模块和增加新功能之后的商务信息查询模块,且可能在将来增加一些新功能。现使用代理模式设计并实现该收费商务信息查询系统。
- 类图:

- 源代码:
package com.fish.pattern.proxy;
public interface Searcher {
String DoSearcher(String userId,String keyword);
}
package com.fish.pattern.proxy;
public class ProxySearcher implements Searcher{
private RealSearcher searcher = new RealSearcher();
private AccessValidator validator;
private Logger logger;
@Override
public String DoSearcher(String userId, String keyword) {
if (this.Validate(userId))
{
String result = searcher.DoSearcher(userId, keyword);
this.Log(userId);
return result;
}
else
{
return null;
}
}
public boolean Validate(String userId)
{
validator = new AccessValidator();
return validator.Validate(userId);
}
public void Log(String userId)
{
logger = new Logger();
logger.Log(userId);
}
}
package com.fish.pattern.proxy;
public class RealSearcher implements Searcher{
@Override
public String DoSearcher(String userId, String keyword) {
System.out.println("用户"+userId+"使用关键词"+keyword+"查询商务信息!");
return "返回具体内容";
}
}
package com.fish.pattern.proxy;
public class Logger {
public void Log(String userId) {
System.out.println("更新数据库,用户"+userId+"查询次数加1!");
}
}
package com.fish.pattern.proxy;
public class AccessValidator
{
public boolean Validate(String userId)
{
System.out.println("在数据库中验证用户'" + userId + "'是否是合法用户?");
if (userId.equals("杨过")) {
System.out.println();
return true;
}
else {
System.out.println(userId+"登录失败!");
return false;
}
}
}
package com.fish.pattern.proxy;
public class Client {
public static void main(String[] args) {
Searcher proxySearcher = new ProxySearcher();
proxySearcher.DoSearcher("杨过","玉女心经");
}
}
- 运行结果:

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律