桥梁模式
桥梁模式:将抽象和实现解耦,使得两者可以独立地变化。
角色:1.Abstraction抽象化角色:定义出该角色的行为,同时保存一个对实现化角色的引用。
2.Implementor实现化角色:定义角色必需的行为和属性。
3.RefunedAbstraction修正抽象化角色:引用实现化角色对抽象话角色进行修正。
4.ConcreteImplementor具体实现化角色:实现具体的方法。
适用场景:不希望或不适用使用继承的场景。接口或者抽象类不稳定的场景。(即容易变化)
具体实现(bridge):公司通过生产产品赚钱
通用实现
1.创建抽象化角色
/**
* 抽象公司类
* 抽象化角色
*/
public class Corp {
private Product product;
public Corp(Product product){
this.product = product;
}
//利用产品完成逻辑
public void makeMoney(){
this.product.beProducted();
this.product.beSelled();
}
}
2.创建具体抽象化角色-房地产公司
/**
* 房地产公司
*/
public class HouseCorp extends Corp{
public HouseCorp(House house){
super(house);
}
@Override
public void makeMoney() {
super.makeMoney();
System.out.println("房地产公司赚钱");
}
}
3.创建具体抽象化角色-山寨公司(山寨公司不确定买什么,这样的设计,如果山寨公司要卖一个新的东西,那么只需要创建一个实现化角色就可以了,并不会影响到山寨公司内部实现)
/**
* 具体实现类
* ipad产品
*/
public class ShanzhaiCorp extends Corp {
public ShanzhaiCorp(Product product){
super(product);
}
@Override
public void makeMoney() {
super.makeMoney();
System.out.println("山寨公司赚钱");
}
}
4.创建抽象实现化角色
/**
* 抽象产品类
* 抽象实现化角色
*/
public abstract class Product {
//被生产
public abstract void beProducted();
//被卖出赚钱
public abstract void beSelled();
}
5.创建两个具体实现化角色
/**
* 具体实现化角色
* 房子产品
*/
public class House extends Product {
@Override
public void beProducted() {
System.out.println("房子被生产");
}
@Override
public void beSelled() {
System.out.println("房子被卖出赚钱");
}
}
/**
* 具体实现类
* ipad产品
*/
public class Ipad extends Product {
@Override
public void beProducted() {
System.out.println("ipad被生产");
}
@Override
public void beSelled() {
System.out.println("ipad被卖出赚钱");
}
}
6.创建场景测试类
/**
* 场景测试类
*/
public class Client {
public static void main(String[] args) {
House house = new House();
Corp hosuseCorp = new HouseCorp(house);
hosuseCorp.makeMoney();
Ipad ipad = new Ipad();
Corp ipadCorp = new ShanzhaiCorp(ipad);
ipadCorp.makeMoney();
}
}