/** * 桥接模式 * 解决多维度可变属性造成的多类问题 * (用到了组合,但与 组合模式 没关系) * * 场景: * 各大品牌生产电子产品 * 品牌:联想、戴尔、苹果 * 产品:台式机、笔记本、pad * * 如果采用继承的方式实现类结构,那类的数量则是一个乘积的关系 * (联想、戴尔、苹果)*(台式机、笔记本、pad) * 这样会产生一些问题: * 1、产生大量的类,类之间还会有重复的功能(冗余) * 2、品牌 和 类型 之间是有关系的(没有解耦) * 3、添加其中一个实现,则需要添加一定数量的另一个(不好维护) * * 如果采用桥接的方式,那类的数量则只是一个相加关系 * (联想、戴尔、苹果)+(台式机、笔记本、pad) * 优点: * 1、大大减少了类的数量 * 2、解除了类之间的耦合关系,增加了复用性和可维护性 */ public class BridgeDemo01 { public static void main(String[] args) { List<Computer> l = new ArrayList<Computer>(); l.add(new Desktop(new Dell())); l.add(new Desktop(new Lenovo())); l.add(new Desktop(new Apple())); l.add(new Laptop(new Dell())); l.add(new Laptop(new Lenovo())); l.add(new Laptop(new Apple())); l.add(new Pad(new Dell())); l.add(new Pad(new Lenovo())); l.add(new Pad(new Apple())); for(Computer c : l){ c.sale(); } } } /** * 电脑抽象类 */ abstract class Computer{ private Brand brand; public Computer(Brand brand){ this.brand = brand; } abstract String getType(); public void sale(){ System.out.println("销售["+brand.getName()+"]牌的"+"["+getType()+"]"); } } /** * 品牌接口 */ interface Brand{ String getName(); } /** * 电脑具体实现类 */ class Desktop extends Computer{ public Desktop(Brand brand) { super(brand); } @Override String getType() { return "台式机"; } } class Laptop extends Computer{ public Laptop(Brand brand) { super(brand); } @Override String getType() { return "笔记本电脑"; } } class Pad extends Computer{ public Pad(Brand brand) { super(brand); } @Override String getType() { return "平板电脑"; } } /** * 品牌具体实现类 */ class Dell implements Brand{ @Override public String getName() { return "戴尔"; } } class Lenovo implements Brand{ @Override public String getName() { return "联想"; } } class Apple implements Brand{ @Override public String getName() { return "苹果"; } }
输出结果:
销售[戴尔]牌的[台式机] 销售[联想]牌的[台式机] 销售[苹果]牌的[台式机] 销售[戴尔]牌的[笔记本电脑] 销售[联想]牌的[笔记本电脑] 销售[苹果]牌的[笔记本电脑] 销售[戴尔]牌的[平板电脑] 销售[联想]牌的[平板电脑] 销售[苹果]牌的[平板电脑]
/** * IPhone6s一共有16种版本 * * 1、三星14nm+海力士MLC+LG+三星 * 2、三星14nm+海力士MLC+LG+海力士 * 3、三星14nm+海力士MLC+夏普+三星 * 4、三星14nm+海力士MLC+夏普+海力士 * 5、三星14nm+东芝TLC+LG+三星 * 6、三星14nm+东芝TLC+LG+海力士 * 7、三星14nm+东芝TLC+夏普+三星 * 8、三星14nm+东芝TLC+夏普+海力士 * 9、台积电16nm+海力士MLC+LG+三星 * 10、台积电16nm+海力士MLC+LG+海力士 * 11、台积电16nm+海力士MLC+夏普+三星 * 12、台积电16nm+海力士MLC+夏普+海力士 * 13、台积电16nm+东芝TLC+LG+三星 * 14、台积电16nm+东芝TLC+LG+海力士 * 15、台积电16nm+东芝TLC+夏普+三星 * 16、台积电16nm+东芝TLC+夏普+海力士 * * 如果使用继承或每一种IPhone6s定义一个类,则需要定义16个类 * (而且每个品牌都生产4中配件的话,则类会更多) * 使用桥接模式我们只需要定义10(4组件+6配置)个类 * 看似差的不多(6个而已),好的,我们还有4种不同的颜色 * 16*4=64 * 16+4=20 */ public class BridgeDemo02 { public static void main(String[] args) { TechBrand samsung = new Samsung(); TechBrand tsmc = new TSMC(); TechBrand hynix = new Hynix(); TechBrand toshiba = new Toshiba(); TechBrand lg = new LG(); TechBrand sharp = new Sharp(); List<IPhone6s> l = new ArrayList<IPhone6s>(16); l.add(new IPhone6s(new CPU(samsung),new Flash(hynix),new Screen(lg),new RAM(samsung))); l.add(new IPhone6s(new CPU(samsung),new Flash(hynix),new Screen(lg),new RAM(hynix))); l.add(new IPhone6s(new CPU(samsung),new Flash(hynix),new Screen(sharp),new RAM(samsung))); l.add(new IPhone6s(new CPU(samsung),new Flash(hynix),new Screen(sharp),new RAM(hynix))); l.add(new IPhone6s(new CPU(samsung),new Flash(toshiba),new Screen(lg),new RAM(samsung))); l.add(new IPhone6s(new CPU(samsung),new Flash(toshiba),new Screen(lg),new RAM(hynix))); l.add(new IPhone6s(new CPU(samsung),new Flash(toshiba),new Screen(sharp),new RAM(samsung))); l.add(new IPhone6s(new CPU(samsung),new Flash(toshiba),new Screen(sharp),new RAM(hynix))); l.add(new IPhone6s(new CPU(tsmc),new Flash(hynix),new Screen(lg),new RAM(samsung))); l.add(new IPhone6s(new CPU(tsmc),new Flash(hynix),new Screen(lg),new RAM(hynix))); l.add(new IPhone6s(new CPU(tsmc),new Flash(hynix),new Screen(sharp),new RAM(samsung))); l.add(new IPhone6s(new CPU(tsmc),new Flash(hynix),new Screen(sharp),new RAM(hynix))); l.add(new IPhone6s(new CPU(tsmc),new Flash(toshiba),new Screen(lg),new RAM(samsung))); l.add(new IPhone6s(new CPU(tsmc),new Flash(toshiba),new Screen(lg),new RAM(hynix))); l.add(new IPhone6s(new CPU(tsmc),new Flash(toshiba),new Screen(sharp),new RAM(samsung))); l.add(new IPhone6s(new CPU(tsmc),new Flash(toshiba),new Screen(sharp),new RAM(hynix))); for(IPhone6s p : l){ System.out.println("配置:"+p.getInfo()); } System.out.println("*************************************************"); System.out.println("您购买的IPhone6s配置为:" + l.get(new Random().nextInt(16)).getInfo()); } } class IPhone6s{ private String info; public IPhone6s(CPU cpu, Flash flash, Screen screen, RAM ram){ this.info = cpu.getName()+" + "+flash.getName()+" + "+ screen.getName()+" + "+ram.getName(); } public String getInfo(){ return info; } } /** * 配件 */ abstract class Component{ TechBrand tb; public Component(TechBrand tb){ this.tb = tb; } public abstract String getType(); public String getName(){ return tb.getName()+"的"+getType(); } } /** * 品牌 */ interface TechBrand{ String getName(); } /** * 配件具体实现类 */ class CPU extends Component{ public CPU(TechBrand tb) { super(tb); } public String getType(){ return "CPU"; } } class Flash extends Component{ public Flash(TechBrand tb) { super(tb); } public String getType(){ return "闪存"; } } class Screen extends Component{ public Screen(TechBrand tb) { super(tb); } public String getType(){ return "屏幕"; } } class RAM extends Component{ public RAM(TechBrand tb) { super(tb); } public String getType(){ return "内存"; } } /** * 品牌具体实现类 */ class Samsung implements TechBrand{ @Override public String getName() { return "三星"; } } class TSMC implements TechBrand{ @Override public String getName() { return "台积电"; } } class Hynix implements TechBrand{ @Override public String getName() { return "海力士"; } } class Toshiba implements TechBrand{ @Override public String getName() { return "东芝"; } } class LG implements TechBrand{ @Override public String getName() { return "LG"; } } class Sharp implements TechBrand{ @Override public String getName() { return "夏普"; } }
相关推荐
《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。...无论是初级开发者还是经验丰富的程序员,都应该不断探索和实践设计模式,以提升自己的专业技能。
《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...
《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...
《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...
《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...
《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书...综上所述,本书不仅是一本关于设计模式的入门书,也是对设计模式应用的深入探讨,无论是对于初级开发者、高级程序员,还是系统分析师,都能从中获得价值。
这23种模式是根据GOF(GoF,Gang of Four)的经典著作《设计模式:可复用面向对象软件的基础》中的分类,包括创建型模式(如工厂模式、抽象工厂模式、单例模式等)、结构型模式(如适配器模式、桥接模式、装饰模式等...
对于不同级别的程序员,设计模式能够提供不同程度的帮助和指导,从初级程序员的基础编程技能提升,到高级程序员的系统设计和架构,再到系统分析师的项目问题解决,设计模式都能发挥关键作用。 在应用设计模式时,...
设计模式是软件工程中解决常见问题的模板或通用解决方案,Java设计模式是这些解决方案在Java语言中的具体实现。《java23种设计模式详细讲解》这本书系统地介绍了23种设计模式,并通过具体的例子来阐释每种模式的应用...
- **桥接模式**:将抽象部分与其实现部分分离,使得两者可以独立变化。 - **组合模式**:将对象组合成树形结构以表示“部分-整体”的层次结构。 - **外观模式**:为子系统中的一组接口提供一个一致的界面,简化子...
桥接模式(Bridge)将抽象部分与实现部分分离,使它们可以独立变化;组合模式(Composite)将对象组合成树形结构,以表示“部分-整体”的层次结构;外观模式(Facade)为子系统提供一个统一的接口,使得子系统的复杂...
《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...
Design_Patterns-Elements_of_Reusable_Object-Oriented_Software.pdf"则是经典的《设计模式:可复用面向对象软件的基础》,通常简称为GOF设计模式,它介绍了23种经典设计模式,如命令模式、代理模式、桥接模式等,...
对于一个Java初级工程师来说,掌握设计模式是提升到高级工程师的关键步骤,因为设计模式能提高代码的可读性、可维护性和可扩展性。 1. **创建型模式**: - **工厂方法**:定义一个用于创建对象的接口,让子类决定...
在介绍24种设计模式之前,首先要明白设计模式的定义及其价值。设计模式是在软件工程领域中,针对特定问题的可复用解决方案的通称,它们是软件设计经验的总结,具有普遍适用性。掌握设计模式对于编写出结构清晰、易于...
**11 桥接模式** - 将抽象部分与它的实现部分分离,使它们都可以独立变化。 **12 享元模式** - 运用共享技术有效地支持大量细粒度的对象。 **13 模板方法模式** - 定义一个操作中的算法骨架,而将一些步骤延迟到...
结构型模式处理对象组合和继承,例如适配器模式、桥接模式和装饰器模式,它们用于将不同类或接口组合在一起。行为型模式则关注对象间的行为分配,如观察者模式、责任链模式和策略模式,它们定义了对象之间的交互方式...
- **初级开发人员**:需要培养批判性思维能力,不断思考和梳理现有设计模式,找到最佳实践。 - **中级开发人员**:在特定的开发环境中灵活选择和应用设计模式,通过实践不断提升自己的技术水平。 #### 五、设计模式...