19、设计模式应用举例:桥接模式:制作电视节目

目录

一、关于桥接模式

二、设计要求

三、设计实现

1.抽象

2.实现者

3.细化抽象

4.具体实现者

四、应用程序

五、执行结果


一、关于桥接模式

设计模式:19、桥接模式-CSDN博客

二、设计要求

中央电视台有许多频道,比如CCTV5负责制作体育节目,CCTV6负责制作电影节目。CCTV类是抽象类,定义了一个抽象方法:makeProgram()。请使用桥接模式,将抽象和它的实现分离。

三、设计实现

1.抽象

CCTV.java

java 复制代码
package xyz.jangle.design.app.bridge;

import javax.swing.JPanel;

/**
 * 抽象
 * @author jangle
 * @email jangle@jangle.xyz
 * @time 2026年10月22日 上午10:06:42
 * 
 */
public abstract class CCTV extends JPanel {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	Program programMaker;
	
	public abstract void makeProgram();
}
2.实现者

Program.java

java 复制代码
package xyz.jangle.design.app.bridge;

import java.util.ArrayList;

/**
 * 实现者
 * @author jangle
 * @email jangle@jangle.xyz
 * @time 2026年10月22日 上午10:07:40
 * 
 */
public interface Program {
	
	ArrayList<String> makeTVProgram();

}
3.细化抽象

CCTV5.java

java 复制代码
package xyz.jangle.design.app.bridge;

import java.awt.BorderLayout;
import java.awt.Font;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;

import javax.swing.JLabel;

/**
 * @author jangle
 * @email jangle@jangle.xyz
 * @time 2026年10月22日 上午10:11:38
 * 
 */
public class CCTV5 extends CCTV implements Runnable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 469126716384759424L;
	JLabel showFilm;
	Thread thread;
	ArrayList<String> content;
	
	public CCTV5(Program program) {
		this.programMaker = program;
		setLayout(new BorderLayout());
		showFilm = new JLabel("CCTV5 体育频道");
		showFilm.setFont(new Font("",Font.BOLD,39));
		add(showFilm,BorderLayout.CENTER);
		thread = new Thread(this);
	}

	@Override
	public void makeProgram() {
		content = programMaker.makeTVProgram();
		if(!thread.isAlive()) {
			thread = new Thread(this);
			thread.start();
		}
	}

	@Override
	public void run() {
		for (int i = 0; i < content.size(); i++) {
			showFilm.setText(content.get(i));
			try {
				TimeUnit.MILLISECONDS.sleep(500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

}

CCTV6.java

java 复制代码
package xyz.jangle.design.app.bridge;

import java.awt.BorderLayout;
import java.awt.Font;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;

import javax.swing.JLabel;

/**
 * 细化抽象
 * @author jangle
 * @email jangle@jangle.xyz
 * @time 2026年10月22日 上午10:11:38
 * 
 */
public class CCTV6 extends CCTV implements Runnable{
	/**
	 * 
	 */
	private static final long serialVersionUID = -8617593741113328113L;
	JLabel showFilm;
	Thread thread;
	ArrayList<String> content;
	
	public CCTV6(Program program) {
		this.programMaker = program;
		setLayout(new BorderLayout());
		showFilm = new JLabel("CCTV6 电影频道");
		showFilm.setFont(new Font("",Font.BOLD,39));
		add(showFilm,BorderLayout.CENTER);
		thread = new Thread(this);
	}

	@Override
	public void makeProgram() {
		content = programMaker.makeTVProgram();
		if(!thread.isAlive()) {
			thread = new Thread(this);
			thread.start();
		}
	}

	@Override
	public void run() {
		for (int i = 0; i < content.size(); i++) {
			showFilm.setText(content.get(i));
			try {
				TimeUnit.MILLISECONDS.sleep(500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

}
4.具体实现者

AthleticProgram.java

java 复制代码
package xyz.jangle.design.app.bridge;

import java.util.ArrayList;

/**
 * 具体实现者
 * @author jangle
 * @email jangle@jangle.xyz
 * @time 2026年10月22日 上午10:22:49
 * 
 */
public class AthleticProgram implements Program {
	
	ArrayList<String> content;
	
	public AthleticProgram() {
		content = new ArrayList<String>();
	}

	@Override
	public ArrayList<String> makeTVProgram() {
		content.clear();
		content.add("足球直播");
		content.add("巴西足球队进场");
		content.add("阿根廷足球队进场");
		content.add("巴西足球队进球");
		content.add("比赛结束");
		return content;
	}

}

FilmProgram.java

java 复制代码
package xyz.jangle.design.app.bridge;

import java.util.ArrayList;

/**
 * 具体实现者
 * @author jangle
 * @email jangle@jangle.xyz
 * @time 2026年10月22日 上午10:22:49
 * 
 */
public class FilmProgram implements Program {
	
	ArrayList<String> content;
	
	public FilmProgram() {
		content = new ArrayList<String>();
	}

	@Override
	public ArrayList<String> makeTVProgram() {
		content.clear();
		content.add("地道战");
		content.add("1937年鬼子侵略华北");
		content.add("八路军带领民兵展开地道战");
		content.add("把鬼子打地找不着北");
		content.add("鬼子最后被消灭了");
		return content;
	}
	
}

四、应用程序

java 复制代码
package xyz.jangle.design.app.bridge;

import java.awt.BorderLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

/**
 * 桥接模式
 * @author jangle
 * @email jangle@jangle.xyz
 * @time 2026年10月22日 上午10:29:31
 * 
 */
public class Application extends JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = -7509941715678152534L;
	
	JButton seeProgram;
	CCTV cctv;
	Program program;
	

	public Application(CCTV cctv, Program program) throws HeadlessException {
		super();
		this.cctv = cctv;
		this.program = program;
		add(cctv,BorderLayout.CENTER);
		seeProgram = new JButton("看节目");
		add(seeProgram,BorderLayout.SOUTH);
		seeProgram.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				cctv.makeProgram();
			}
		});
		setVisible(true);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		
	}


	public static void main(String[] args) {
		Program program = new AthleticProgram();
		CCTV cctv = new CCTV5(program);
		Application application = new Application(cctv, program);
		application.setBounds(10, 10, 200, 300);
		program = new FilmProgram();
		cctv = new CCTV6(program);
		Application application2 = new Application(cctv, program);
		application2.setBounds(220, 10, 200, 300);
	}

}

五、执行结果

相关推荐
知守观1 小时前
从 4 套 PDF 库的混战,聊聊老项目的依赖管理与“静默失败”
java·后端·设计模式
geovindu1 天前
rust: Mediator Pattern
开发语言·后端·设计模式·rust·中介者模式·行为模式
SENKS_DIGITAL1 天前
金属加工遇上数字化:通快展厅里的工业蜕变-森克思科技
科技·设计模式·展厅设计·展馆设计·科技展厅设计·展览设计·企业展厅设计
flower9803231 天前
C++消息总线软件开发框架AI重构版
c++·设计模式·架构
zzu123zsw2 天前
业务拆分后的治理深水区:解构企业级微服务六大核心设计模式与高可用落真实践
微服务·设计模式·架构·高可用·微服务架构设计
牧瀬クリスだ2 天前
观察者模式:一个对象变化,一群对象自动响应
java·观察者模式·设计模式
拆房老料2 天前
【第四部分:Agentic 智能体设计模式】16. 一个 Prompt 搞不定复杂任务?试试 Prompt Chaining
java·前端·人工智能·设计模式·prompt
MobotStone3 天前
AI 写代码越来越爽,但程序员可能越来越废了
人工智能·设计模式
墨子夕3 天前
设计模式——Java × Python 双语言精讲 · 23 个经典模式 + 现代演进(前言篇)
java·开发语言·设计模式