23种经典设计模式的java实现_3_桥接模式
* @author <a href="huqimailto:huqiyes@gmail.com">huqi</a>
* @serialData 2007
*/
public interface IText ...{
public void DrawTextImp();
}
* The ConcreteImplementor
*/
public class TextImpLinux implements IText ...{
public void DrawTextImp() ...{
System.out.println("The text has a Linux style.");
}
}
* The ConcreteImplementor
*/
public class TextImpMac implements IText ...{
public void DrawTextImp() ...{
System.out.println("The text has a Mac style.");
}
}
这个抽象类可以看作是一个桥梁,它被用来“桥接”字体的基本实现与字体的附加特性,使字体的属性得到无绑定的扩充:
* The Abstract of Text<br>
* Set the Text's System Style
* <p>
* This abstract class is a bridge,<br>
* it can bridge "System Style" to real implemention "Text Style" of IText.
*
* @author <a href="huqimailto:huqiyes@gmail.com">huqi</a>
* @serialData 2007
*/
public abstract class AbstractText ...{
public abstract void DrawText(String text);
if (type.equals("Mac")) ...{
return new TextImpMac();
} else if (type.equals("Linux")) ...{
return new TextImpLinux();
} else ...{
return new TextImpMac();
}
}
}
那么,以下就是字体的附加特性——粗体和斜体,它们通过实现抽象类AbstractText来与基本属性的实现结合:
* The RefinedAbstraction
*
* @author <a href="huqimailto:huqiyes@gmail.com">huqi</a>
* @serialData 2007
*/
public class TextBold extends AbstractText ...{
private IText imp;
imp = GetTextImp(type);
}
System.out.println(text);
System.out.println("The text is bold text.");
imp.DrawTextImp();
}
}
* The RefinedAbstraction
*
* @author <a href="huqimailto:huqiyes@gmail.com">huqi</a>
* @serialData 2007
*/
public class TextItalic extends AbstractText ...{
private IText imp;
imp = GetTextImp(type);
}
System.out.println(text);
System.out.println("The text is italic text.");
imp.DrawTextImp();
}
}
最后,当然是测试启动类啦,通过可以测试我们对这个模式的实现:
* 桥接模式
* <p>
* 将抽象部分与它的实现部分分离,使它们都可以独立地变化。
*
* @author <a href="huqimailto:huqiyes@gmail.com">huqi</a>
* @serialData 2007
*/
public class Test ...{
AbstractText myText = new TextBold("Mac");
myText.DrawText("=== A test String ===");
myText.DrawText("=== A test String ===");
myText.DrawText("=== A test String ===");
myText.DrawText("=== A test String ===");
}
}
你还等什么呢?复制下来运行它试试看吧——如果你还对“桥接”模式不了解的话。
转载于:https://blog.51cto.com/huqicto/280902
23种经典设计模式的java实现_3_桥接模式相关推荐
- [转]23种经典设计模式的java实现_5_职责链模式
对于职责链模式,一般是这么定义的:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,即--将这些对象连成一条(处理)链,并沿着这条链传递该请求,直到这条链结束同时有一个对象处理它 ...
- 23种经典设计模式的java实现_5_职责链模式
对于职责链模式,一般是这么定义的:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,即--将这些对象连成一条(处理)链,并沿着这条链传递该请求,直到这条链结束同时有一个对象处理它 ...
- 23种经典设计模式都有哪些,如何分类?Java设计模式相关面试
23种经典设计模式都有哪些,如何分类? 23种经典设计模式都有哪些,如何分类? java常用的设计模式?说明工厂模式 Java 中的23 种设计模式: Factory(工厂模式), Builder(建 ...
- 设计模式之委派模式(不属于23种经典设计模式之一)
介绍 标准定义:委派模式的原理为类B和类A是两个互相没有任何关系的类,B具有和A一模一样的方法和属性,并且调用B中的方法.属性就是调用A中同名的方法和属性.B好像就是一个受A授权委托的中介.第三方的代 ...
- 23种经典设计模式的原理、背后的思想、应用场景(下)
对程序员来说,除了算法,设计模式也是提升代码能力的关键技能,今天我就想跟你聊聊 23种经典的设计模式. 23种经典设计模式共分为3种类型,分别是创建型.结构型和行为型.今天,我们把这3种类型分成3个对 ...
- C++之23种经典设计模式(一)
C++之23种经典设计模式(一) C++之23种经典设计模式(一) 单例模式(Singleton) 原型模式(Prototype) 工厂模式(Factory) C++之23种经典设计模式(一) 在偶然 ...
- [设计模式] GoF 23种经典设计模式
原文链接:https://www.yuque.com/cppdev/patterns/zainii 「GOF设计模式」Gang of Four,四人帮.设计模式的经典书籍<设计模式--可复用面向 ...
- 一文快速理解23种经典设计模式
> 对经典的23种设计模式介绍,来判断适合哪种设计模式进行设计 23种设计模式: 第1 部分 适应设计模式 Iterator 模式 迭代器,松耦合 Adapter 模式 适配器模式,使用同样 ...
- 在这里23种经典设计模式UML类图汇总
创建型模式 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说"来四个鸡翅"就 ...
最新文章
- .如何实现浏览器内多个标签页之间的通信?
- Spring使用注解配置依赖注入
- 1毛钱的CDN你家的网站会用吗?
- 《数据结构与算法分析:C语言描述》复习——第十章“算法设计技巧”——Minimax策略...
- 直播 | WWW 2021:基于结构增强文本表示学习的知识图谱补全方法
- .NET Core 2.0体验
- 设计模式2:工程模式(1)
- mysql统计各部门人数_2021各省份电网报名人数统计!会不会比考研还难?有些省份人数还就多的离谱了。。。...
- Menelaus定理与证明
- [Node.js] node.js入门
- vmware的vmnet-概念的解说
- 【超详细整理数组基础知识点】(学习笔记8--数组上)
- 教你用命令行扩展VHD的大小
- Android上传图片的两种方式
- matlab imf1,NGPM_v1.4y GA多目标优化的程序 带约束 里面有教程 matlab 272万源代码下载- www.pudn.com...
- 二阶系统 matlab,线性二阶系统性能的MATLAB仿真.pdf
- 18650锂电池知识全解析
- [论文素材]Previous Work----自动仇恨言论检测和冒犯性语言问题
- 视频教程-①Spring Cloud 第一季(初级入门篇)-Java
- 信息技术教案 计算机病毒,四年级下信息技术教案-计算机病毒知识二辽师大版.docx...
热门文章
- 【通知】3月第二周直播预告,模型优化,人脸识别,图像增强核心技术与难题...
- 全球及中国彩妆行业渠道模式调研与发展方向分析报告2022版
- 全球及中国洗涤剂行业十四五总体规模与盈利状况分析报告2022版
- openssl之EVP系列之1---算法封装
- 兰州谋定百合品牌-农业大健康·万祥军:功能性农业产业脱贫
- CSS响应式:根据分辨率加载不同CSS的几个方法
- hashMap和hashTable的区别(个人总结)
- Android 中文件类型与MIME的匹配表(转)
- C++ primer记录
- 博客园北京俱乐部2009年2月28日活动