java 设计模式 之 桥梁模式
Posted blogxiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 设计模式 之 桥梁模式相关的知识,希望对你有一定的参考价值。
桥梁模式:将抽象和实现解耦,使两者可以独立的变化。解释:将两个有组合关系,强耦合的对象,各自抽象然后解耦。(类关系图看https://www.cnblogs.com/blogxiao/p/9513883.html 这篇文章)
下面以公司生产产品为例子。
1.小汽车公司生产小汽车。这里有两个对象:汽车公司和小汽车。这两个是聚合的关系。类关系图如下:
业务逻辑就是:汽车公司生产汽车产品
2.缺点:扩展性差,当有是个产品需要生产的时候,此时需要在往这里面的增加十个产品类。当有多个公司生产多个产品的时候,此时公司和类都会有多份。桥梁模式解决:公司可以有多个,产品可以有多个。每个公司都可以生产任意产品。
将公司和产品抽象,当客户端想怎么随机组合都可以。
3.具体的类实现通过idea 生成:
注意1 和 2 的地方和上面的画的不一样,可以限定最小类型也可以限定父亲Product
4.代码
Product.java
package javadesign.bridge; public abstract class Product public abstract void beProducted(); public abstract void beSelled();
Company.java
package javadesign.bridge; public abstract class Company Product product; public Company(Product product) this.product=product; public void makeMoney() this.product.beProducted(); this.product.beSelled();
Product 的子类:CarProduct.java
package javadesign.bridge.subpro; import javadesign.bridge.Product; public class CarPro extends Product @Override public void beProducted() System.out.println("生产汽车"); @Override public void beSelled() System.out.println("卖汽车");
Product 的子类:ToysProduct.java
package javadesign.bridge.subpro; import javadesign.bridge.Product; public class ToysPro extends Product @Override public void beProducted() System.out.println("生产玩具"); @Override public void beSelled() System.out.println("卖玩具");
Company 的子类:carCompany
package javadesign.bridge.subcop; import javadesign.bridge.Company; import javadesign.bridge.subpro.CarPro; public class CarCompany extends Company public CarCompany(CarPro product) super(product); @Override public void makeMoney() super.makeMoney(); System.out.println("公司卖车挣钱");
Company 的子类:ToysCompany
package javadesign.bridge.subcop; import javadesign.bridge.Company; import javadesign.bridge.subpro.ToysPro; public class ToysCompany extends Company public ToysCompany(ToysPro product) super(product); @Override public void makeMoney() super.makeMoney(); System.out.println("公司挣卖玩具的钱");
client.java
package javadesign.bridge; import javadesign.bridge.subcop.CarCompany; import javadesign.bridge.subcop.ToysCompany; import javadesign.bridge.subpro.CarPro; import javadesign.bridge.subpro.ToysPro; public class Client public static void main(String[] args) CarPro carPro=new CarPro(); Company company=new CarCompany(carPro); company.makeMoney(); System.out.println("======================="); ToysPro toysPro=new ToysPro(); Company company1=new ToysCompany(toysPro); company1.makeMoney();
运行结果:
5.通用的桥梁模式:
桥梁模式的优点:解决不能多继承的缺点,在该模式下实现不受抽象的约束。
应用场景:发现类的继承有N层的时候使用。
以上是关于java 设计模式 之 桥梁模式的主要内容,如果未能解决你的问题,请参考以下文章