이 글은 주로 Java 디자인 패턴의 브리징 모드를 소개하고 있으며 브리징 모드의 개념, 기능, Java 구현 방법 및 관련 주의 사항을 예제 형식으로 자세히 분석합니다.
이 글에서는 예제가 포함된 Java 디자인 패턴입니다. 다음과 같이 참조할 수 있도록 모든 사람과 공유하세요.
개념:
브릿지 패턴: 추상적인 부분을 구현 부분과 분리하여 독립적으로 변경할 수 있습니다.
브리지 모드는 상속 관계를 연관 관계로 변환하여 클래스 간의 결합을 줄이고 코드 작성 양을 줄입니다.
브릿지 모드는 언제 사용하나요?
간단히 말하면, 사물의 특징을 추상화할 때, 사물의 특징적인 속성은 매우 추상적이어서, 속성을 다시 추상화해야 합니다.
그렇지 않으면 특정 하위 클래스의 수가 기하학적으로 늘어나 확장이 어려워집니다. 기존 코드를 유지할 방법이 없습니다.
예를 들어 휴대폰이라는 두 개체를 추상화하면 운영 체제, CPU, 화면, 통신사 네트워크 등과 같은 여러 속성이 매우 복잡합니다. 이러한 속성은 단순히 직접 정의할 수 없으며 다시 추상화해야 합니다. 특정 휴대폰 객체는 이러한 속성들의 조합이지만, 이는 단순한 조합이 아니며, 속성들은 자신의 기능을 속성으로 구현해야 합니다. 이러한 설계에서는 코드 유지 관리 및 확장이 더 쉬워집니다.
참고: 이 모델에 대해 이야기할 때 제가 말하고 쓴 예가 정확하다고 보장할 수는 없습니다. 따라서 모든 예는 개인적인 이해를 바탕으로 한 것입니다.
제가 생각하는 브릿지 모드 설명도:
다음은 예시입니다.
1 먼저 추상 클래스를 정의하고, 객체의 특성을 추상화합니다.
향후 연결 및 확장을 위해 개체의 속성에 대한 차원을 나눕니다.
package test.design.bridge; public abstract class CellPhone { private String cellPhoneName; public CellPhoneSystem cellPhoneSystem; public CellPhoneCPU cellPhoneCPU; public void works(){ System.out.println("---------------------"); System.out.println("This cellphone is:"+this.getCellPhoneName()+",welcome to use. "); System.out.println("This cellphone detail infomation:"); System.out.println("系统类型:"+this.getCellPhoneSystem().getSystemName()); System.out.println("cpu型号:"+this.getCellPhoneCPU().getCpuName()); System.out.println("---------------------"); } public String getCellPhoneName() { return cellPhoneName; } public void setCellPhoneName(String cellPhoneName) { this.cellPhoneName = cellPhoneName; } public CellPhoneSystem getCellPhoneSystem() { return cellPhoneSystem; } public void setCellPhoneSystem(CellPhoneSystem cellPhoneSystem) { this.cellPhoneSystem = cellPhoneSystem; } public CellPhoneCPU getCellPhoneCPU() { return cellPhoneCPU; } public void setCellPhoneCPU(CellPhoneCPU cellPhoneCPU) { this.cellPhoneCPU = cellPhoneCPU; } }
2. 속성 차원의 추상화. (인터페이스 정의를 사용할 수 있으며 키는 특정 기능에 따라 다릅니다.)
package test.design.bridge; /** * 属性cpu被抽象成一个维度,为了以后扩展 * @author lushuaiyin * */ public abstract class CellPhoneCPU { public CellPhone cellPhone; public String cpuName; public void cpuWorks(){ System.out.println("I am cpu. My pattern is:"+this.getCpuName()); System.out.println("I am working for this cellphone:"+this.getCellPhone().getCellPhoneName()); } public CellPhone getCellPhone() { return cellPhone; } public void setCellPhone(CellPhone cellPhone) { this.cellPhone = cellPhone; this.getCellPhone().setCellPhoneCPU(this);// 装配(桥接,或者可以认为对象类与其属性类的传递) } public String getCpuName() { return cpuName; } public void setCpuName(String cpuName) { this.cpuName = cpuName; } }
package test.design.bridge; /** * 属性操作系统被抽象成一个维度,为了以后扩展 * @author lushuaiyin * */ public abstract class CellPhoneSystem { public CellPhone cellPhone; public String SystemName; public void systemWorks(){ System.out.println("I am "+this.getSystemName()+" system."); System.out.println("I am working for this cellphone:"+this.getCellPhone().getCellPhoneName()); } public CellPhone getCellPhone() { return cellPhone; } public void setCellPhone(CellPhone cellPhone) { this.cellPhone = cellPhone; this.getCellPhone().setCellPhoneSystem(this);// 装配(桥接,或者可以认为对象类与其属性类的传递) } public String getSystemName() { return SystemName; } public void setSystemName(String systemName) { SystemName = systemName; } }
3. 특정 차원 속성 객체.
여기서 운영 체제 속성과 CPU 속성에 각각 2개의 특정 객체를 정의합니다.
package test.design.bridge; public class AndroidSystem extends CellPhoneSystem{ }
package test.design.bridge; public class IOSSystem extends CellPhoneSystem{ }
package test.design.bridge; /** * 双核cpu * @author Administrator * */ public class TwoCore extends CellPhoneCPU{ }
package test.design.bridge; /** * 四核cpu * @author Administrator * */ public class FourCore extends CellPhoneCPU{ }
4. 테스트 코드.
차원을 확장해야 할 때 차원을 확장하는 방법에 대해 이야기합니다.
휴대폰 개체 정의
package test.design.bridge; public class Phone1 extends CellPhone{ //具体对象的属性与逻辑 }
주요 기능 테스트
package test.design.bridge; public class TestMain { /** * @param args */ public static void main(String[] args) { //任何一种具体的对象都是复杂多种属性的集合,在此可以看出桥接模式在构建对象时的灵活性 //产生一个具体对象1 CellPhone p1=new Phone1(); p1.setCellPhoneName(" IPhone 6 "); CellPhoneSystem system1=new IOSSystem();//操作系统属性维度 system1.setSystemName("ios7"); system1.setCellPhone(p1);//装配 system1.systemWorks();//工作 /*装配说的简单点就是传值。因为我们把一个对象的属性按维度分开来了, 那么桥接的时候就必须相互传递对象。即对象类可以调用子属相类对象, 子属性类对象也可以调用该对象类. 关于这样的传值方式有多种,你可以在构造函数中传递,也可以在 调用具体逻辑方法时传递。这里我直接用set方法传递,只是为了更清楚. 如果某个属性维度是必须出现的,那就可以在抽象类的构造函数中传入*/ CellPhoneCPU cpu1=new TwoCore();//cpu属性维度 cpu1.setCpuName("A6"); cpu1.setCellPhone(p1); cpu1.cpuWorks(); p1.works();//最终整体对象功能 /* 桥接模式就是为了应对属性的扩展,在此说的属性必须是在维度确定的情况下。 比如,这里我们在定义手机对象时,确定两个属性维度:操作系统和cpu型号。 以后再这两个属性中,需要扩展时,就可以使用该模式。比如,一种新的cpu 型号出现了,那么我不用重新设计现在的代码,只要增添一个cpu类即可。 如果出现了新的维度属性,比如手机对象必须考虑屏幕大小。那桥接模式 在此就需要从根本上修改代码来了。 */ System.out.println("-----------分割---------------------------"); //在cpu维度上扩展。比如出现新型cpu:8核三星Exynos 5 Octa芯片". //三星手机推出了GALAXY Note Ⅲ就是使用这种新型cpu. 写一个新类EightCore扩展cpu维度. //同时定义这个手机对象GALAXY Note Ⅲ为PhoneGalaxyNote3 CellPhone note3=new PhoneGalaxyNote3(); note3.setCellPhoneName("GALAXY Note Ⅲ"); CellPhoneSystem system2=new AndroidSystem(); system2.setSystemName("android4"); system2.setCellPhone(note3);//装配 system2.systemWorks();//工作 CellPhoneCPU cpu2=new EightCore();//最新8核cpu cpu2.setCpuName("三星Exynos 5 Octa芯片"); cpu2.setCellPhone(note3); cpu2.cpuWorks(); note3.works();//三星GALAXY Note Ⅲ新体验 } }
확장해야 하는 경우 새 차원 속성 정의
package test.design.bridge; public class EightCore extends CellPhoneCPU { }
package test.design.bridge; public class PhoneGalaxyNote3 extends CellPhone{ //具体对象的属性与逻辑 }
테스트 인쇄;
위 내용은 Java 디자인 패턴의 브리지 모드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

封装是一种信息隐藏技术,是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法;封装可以被认为是一个保护屏障,防止指定类的代码和数据被外部类定义的代码随机访问。封装可以通过关键字private,protected和public实现。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于设计模式的相关问题,主要将装饰器模式的相关内容,指在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式,希望对大家有帮助。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

드림위버 CS6
시각적 웹 개발 도구
