java 设计模式 之 桥梁模式
2020-12-13 01:51
标签:product rri 解决 str 组合 design system bst one 桥梁模式:将抽象和实现解耦,使两者可以独立的变化。解释:将两个有组合关系,强耦合的对象,各自抽象然后解耦。(类关系图看https://www.cnblogs.com/blogxiao/p/9513883.html 这篇文章) 下面以公司生产产品为例子。 1.小汽车公司生产小汽车。这里有两个对象:汽车公司和小汽车。这两个是聚合的关系。类关系图如下: 业务逻辑就是:汽车公司生产汽车产品 2.缺点:扩展性差,当有是个产品需要生产的时候,此时需要在往这里面的增加十个产品类。当有多个公司生产多个产品的时候,此时公司和类都会有多份。桥梁模式解决:公司可以有多个,产品可以有多个。每个公司都可以生产任意产品。 将公司和产品抽象,当客户端想怎么随机组合都可以。 3.具体的类实现通过idea 生成: 注意1 和 2 的地方和上面的画的不一样,可以限定最小类型也可以限定父亲Product 4.代码 Product.java Company.java Product 的子类:CarProduct.java Product 的子类:ToysProduct.java Company 的子类:carCompany Company 的子类:ToysCompany client.java 运行结果: 5.通用的桥梁模式: 桥梁模式的优点:解决不能多继承的缺点,在该模式下实现不受抽象的约束。 应用场景:发现类的继承有N层的时候使用。 java 设计模式 之 桥梁模式 标签:product rri 解决 str 组合 design system bst one 原文地址:https://www.cnblogs.com/blogxiao/p/11012647.htmlpackage javadesign.bridge;
public abstract class Product {
public abstract void beProducted();
public abstract void beSelled();
}
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();
}
}
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("卖汽车");
}
}
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("卖玩具");
}
}
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("公司卖车挣钱");
}
}
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("公司挣卖玩具的钱");
}
}
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();
}
}