比如手机类,有各种类型,比如翻盖、平板等,每一类下又有各个品牌,比如华为,如果新增一个类型,比如折叠屏,或者新增一个手机品牌,苹果,那么会导致

扩展性问题。

这种情况下,应该使用桥接模式。

代码:

创建手机品牌接口以及两个手机品牌实现类

//品牌手机接口
public interface Brand {
	void open();
	void close();
	void call();
}
public class Vivo implements Brand {

	@Override
	public void open() {
		System.out.println(" Vivo手机开机 ");
	}

	@Override
	public void close() {
		System.out.println(" Vivo手机关机");
	}

	@Override
	public void call() {
		System.out.println(" Vivo手机打电话");
	}

}
public class XiaoMi implements Brand {

	@Override
	public void open() {
		System.out.println("小米手机开机 ");
	}

	@Override
	public void close() {
		System.out.println("小米手机关机");
	}

	@Override
	public void call() {
		System.out.println("小米手机打电话");
	}

}

  创建 手机抽象类,以及两个按照类别区别的实现类:

public abstract class Phone {

	//组合  品牌
	private Brand brand;

	//构造器
	public Phone(Brand brand) {
		super();
		this.brand = brand;
	}

	protected void open() {
		this.brand.open();
	}
	protected void close() {
		brand.close();
	}
	protected void call() {
		brand.call();
	}

}

//折叠手机
public class FoldedPhone extends Phone {

	public FoldedPhone(Brand brand) {
		super(brand);
	}

	public void open() {
		super.open();
		System.out.println("折叠手机 ");
	}

	public void close() {
		super.close();
		System.out.println("折叠手机 ");
	}

	public void call() {
		super.call();
		System.out.println("折叠手机 ");
	}
}

//翻盖手机
public class UpRightPhone extends Phone {
		public UpRightPhone(Brand brand) {
			super(brand);
		}
		public void open() {
			super.open();
			System.out.println(" 翻盖手机");
		}
		public void close() {
			super.close();
			System.out.println("翻盖手机");
		}
		public void call() {
			super.call();
			System.out.println(" 翻盖手机");
		}
}

  测试:

public static void main(String[] args) {

		Phone phone1 = new FoldedPhone(new XiaoMi());

		phone1.open();
		phone1.call();
		phone1.close();

		System.out.println("=======================");

		Phone phone2 = new FoldedPhone(new Vivo());

		phone2.open();
		phone2.call();
		phone2.close();

		System.out.println("==============");

		UpRightPhone phone3 = new UpRightPhone(new XiaoMi());

		phone3.open();
		phone3.call();
		phone3.close();

		System.out.println("==============");

		UpRightPhone phone4 = new UpRightPhone(new Vivo());

		phone4.open();
		phone4.call();
		phone4.close();
	}

  

===================================

===========================================

num11---桥接模式的更多相关文章

  1. BridgePattern(桥接模式)

    /** * 桥接模式 * @author TMAC-J * 应用于多维度方案 * 用组合的形式代替继承 * 符合单一职责原则 * 一个类只有一个引起他变化的原因 * 增加程序灵活性 */ public ...

  2. PHP设计模式(八)桥接模式(Bridge For PHP)

    一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 二.案例 1.模拟毛笔(转) 需求:现在需要准备三种粗细(大中小),并且有五种颜色的比 如果使用蜡 ...

  3. 设计模式(八)桥接模式(Bridge Pattern)

    一.引言 这里以电视遥控器的一个例子来引出桥接模式解决的问题,首先,我们每个牌子的电视机都有一个遥控器,此时我们能想到的一个设计是——把遥控器做为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视 ...

  4. 设计模式--桥接模式Bridge(结构型)

    一.概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或者多个维度的变化,如何应对这种"多维度的变化",就可以利用桥接模式. 引例: 设想如果要绘制矩形.圆形.椭圆.正方形,我 ...

  5. vmware中虚拟机与主机ping不通,桥接模式,IP地址在同一网段,无法互ping!

    现象描述:网卡选用的桥接模式,IP地址在同一个网段,虚拟机内部可以正常上网,但是Guest OS和Host OS无法互ping! 原因:虚拟机里的防火墙没有关闭,导致禁用ping功能. 解决方法:关闭 ...

  6. 桥接模式/bridge模式/对象结构型

    意图 将抽象部分与它的实现部分分离,使它们都可以独立的变化. 动机 当一个抽象类有多个实现时,通常用继承来协调它们.但是继承机制将抽象和实现固定,难以对抽象部分和实现部分独立地进行修改.扩充和重用. ...

  7. Objective-C 桥接模式 -- 简单实用和说明

    桥接模式---把两个相关联的类抽象出来, 以达到解耦的目的 比如XBox遥控器跟XBox主机, 我们抽象出主机和遥控器两个抽象类, 让这两个抽象类耦合 然后生成这两个抽象类的实例XBox & ...

  8. C#设计模式-桥接模式

    这里以电视遥控器的一个例子来引出桥接模式解决的问题,首先,我们每个牌子的电视机都有一个遥控器,此时我们能想到的一个设计是——把遥控器做为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视品牌的遥控 ...

  9. C#设计模式系列:桥接模式(Bridge)

    1.桥接模式简介 1.1>.定义 当一个抽象可能有多个实现时,通常用继承来进行协调.抽象类定义对该抽象的接口,而具体的子类则用不同的方式加以实现.继承机制将抽象部分与它的实现部分固定在一起,使得 ...

  10. 《JS设计模式笔记》 4,桥接模式

    //桥接模式的作用在于将实现部分和抽象部分分离开来,以便两者可以独立的变化. var singleton=function(fn){ var result; return function(){ re ...

随机推荐

  1. Python在Windows下列出所有的安装包和模块

    1.查看python安装的module python -m pydoc module 或 >>>help('module') 2.用pip查看 pip list

  2. Java 中的四种权限修饰符

    * * private: * Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”. * 被其修饰的属性以及方法只能被该类的对象 访问,其子类不能访问,更不能允许跨包访问. * * def ...

  3. springboot2 + grpc

    项目情况: springboot: 2.2.2 grpc-spring-boot-starter: 2.6.1.RELEASE 项目目录: mypro: - person  - grpc服务端 - l ...

  4. 单词匹配 - hash

    哈利波特在魔法学校的必修课之一就是学习魔咒.据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的帮助. 给你一部魔咒词 ...

  5. 发布到远程存储库时遇到错误: Git failed with a fatal error.

    正在推送 master发布到远程存储库时遇到错误: Git failed with a fatal error.Authentication failed for 'http://1212121xxx ...

  6. Docker 安装 Elasticsearch+kibana

    1 下载镜像 docker pull elasticsearch:7.4.1 docker pull kibana:7.4.1 拉取的镜像如下: 2 创建network 创建一个网络,名字任意取,使得 ...

  7. c#数字图像处理(十三)图像开运算与闭运算

    图像开运算与闭运算定义 二值图像开运算的数学表达式为: g(x, y)=open[f(x, y ), B]=dilate{erode[f(x, y),B],B} 二值图像的开运算事实上就是先作腐蚀运算 ...

  8. 使用FileZilla Pro S3协议访问七牛云对象存储

    偶然发现FileZilla还有Pro版本,主要是比免费版多了一些协议支持,也偶然发现七牛云支持了S3协议接口,这样刚好弥补了其没有FTP的不足,于是找官方文档,折腾一下,使用FileZilla Pro ...

  9. 19_08_26校内训练[Max]

    题意 求$max_{l \leq r}{\{min{\{a_l,a_{l+1},...,a_r\}}*(r-l+1)\}}$ 思考 分治,考虑一个区间跨过某个点的贡献即可. 代码 #include&l ...

  10. 【置顶】入驻百家号【九哥聊IT】和【九哥九嫂小日子】,欢迎关注

    欢迎大家关注. 1.关注百家号[九哥聊IT],每天专注讲解互联网最新资讯和知识分享.2.关注百家号[九哥九嫂小日子],带你看下班之外的九哥.