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

扩展性问题。

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

代码:

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

//品牌手机接口
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();
	}

  

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

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

最新文章

  1. URL类
  2. 【转】Eclipse下启动tomcat报错:/bin/bootstrap.jar which is referenced by the classpath, does not exist.
  3. ssh架构简单解释和vo po解释
  4. java分享第二天(变量及命名规范)
  5. 编写自己的Acunetix WVS漏洞扫描脚本详细教程
  6. 【OpenCV入门指南】第一篇 安装OpenCV
  7. GLib基础
  8. 回顾javase点滴
  9. nodejs对静态文件目录的处理
  10. php做站点购物车 你搞懂了吗?
  11. IntPtr与自定义结构互转
  12. Cloud Engine
  13. UVALive-5731
  14. Java :内部类基础详解
  15. [LeetCode] Subtree of Another Tree 另一个树的子树
  16. Unable to find remote helper for 'https'
  17. 每日分享!~ vue JavaScript中为什么可以读取到字符串的长度!(包装对象)
  18. (自用 )npm --save和--save-dev区别
  19. 动态改变APP图标
  20. CentOS中与网络相关的常用

热门文章

  1. 在nginx服务器里面搭建好node.js本地服务器后,利用Node.js的FS模块,实现简单数据的写入和读取
  2. 你真的看懂Android事件分发了吗?
  3. FlashFXP 5.0.0官方中文破解版,附文件下载地址和破解码
  4. 【Java并发基础】并发编程领域的三个问题:分工、同步和互斥
  5. Java 利用Map集合计算一个字符串中每个字符出现的次数
  6. Friday the Thirteenth 黑色星期五 USACO 模拟 超级简单做法
  7. .net core2.2上传文件总结
  8. .NET Core开发的iNeuOS工业互联平台,iNeuKernel物联网核心组件在Docker容器中部署。
  9. Vue中的nextTick()浅析
  10. Oracle v_$和v$的解释