Java设计模式:桥接模式解决的架构设计痛点

/**

  • 生产

*/

public abstract void produce();

/**

  • 销售

*/

public abstract void sell();

/**

  • 工厂运营。

*/

public void operation() {

produce();

sell();

}

}

一个造船厂:

public class BoatFactory extends Factory{

@Override

public void produce() {

System.out.println(“制造船”);

}

@Override

public void sell() {

System.out.println(“销售船”);

}

}

一个汽车厂:

public class CarFactory extends Factory{

@Override

public void produce() {

System.out.println(“生产汽车”);

}

@Override

public void sell() {

System.out.println(“销售汽车”);

}

}

测试:

Factory factory = new CarFactory();

factory.operation();

输出的是汽车厂的生产和销售活动。

但是现在问题来了,以这样的架构设计,如果有一天行业和市场发生变化,要开设一家制造手机的手机工厂,那以前创建和运转良好的船厂、汽车厂已有的资源均不能使用。工厂要转型生产手机,则需要重新布置手机生产的产线。换言之,以前那套架构转型成本太高,缺乏资源的复用,这是痛点。有没有一种连接(桥接、桥梁)办法,实现高内聚,低耦合工厂和产品?


现在开始改进。

先把工厂生产和销售的对象抽象成Product模型:

public abstract class Product {

/**

  • 产品生产

*/

public abstract void produce();

/**

  • 产品销售

*/

public abstract void sell();

}

抽象工厂,传入一个什么样的产品就生产和销售该产品:

public abstract class Factory {

private Product product;

public Factory(Product product) {

this.product = product;

}

public void setProduct(Product product) {

this.product = product;

}

/**

  • 工厂运营。

*/

public void operation() {

product.produce();

product.sell();

}

}

具体的工厂实现:

public class SomeFactory extends Factory{

public SomeFactory(Product product) {

super(product);

}

}

那么原先的船和汽车作为产品的角色,分别抽象定义:

public class Boat extends Product {

@Override

public void produce() {

System.out.println(“生产船”);

}

@Override

public void sell() {

System.out.println(“销售船”);

}

}

public class Car extends Product{

@Override

public void produce() {

System.out.println(“生产汽车”);

}

@Override

public void sell() {

System.out.println(“销售汽车”);

}

}

测试:

Car car=new Car();

Factory factory=new SomeFactory(car);

factory.operation();

Boat boat=new Boat();

factory.setProduct(boat);

factory.operation();

输出:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值