Bridge,桥模式:将抽象部分与它的实现部分相分离,使他们可以独立的变化。
package com.cbf4life;
public abstract class Corp {
protected abstract void produce();
protected abstract void sell();
public void makeMoney(){
this.produce();
this.sell();
}
}
package com.cbf4life;
/**
* 房地产公司
*/
public class HouseCorp extends Corp {
protected void produce() {
System.out.println("房地产公司盖房子...");
}
protected void sell() {
System.out.println("房地产公司出售房子...");
}
public void makeMoney(){
super.makeMoney();
System.out.println("房地产公司赚大钱了...");
}
}
package com.cbf4life;
public class ClothesCorp extends Corp {
protected void produce() {
System.out.println("服装公司生产衣服...");
}
protected void sell() {
System.out.println("服装公司出售衣服...");
}
public void makeMoney(){
super.makeMoney();
System.out.println("服装公司赚小钱...");
}
}
package com.cbf4life;
public class IPodCorp extends Corp {
protected void produce() {
System.out.println("我生产iPod...");
}
protected void sell() {
System.out.println("iPod畅销...");
}
public void makeMoney(){
super.makeMoney();
System.out.println("我赚钱呀...");
}
}
}
package com.cbf4life.implementor;
public abstract class Product {
public abstract void beProducted();
public abstract void beSelled();
}
package com.cbf4life.implementor;
public class House extends Product {
public void beProducted() {
System.out.println("生产出的房子是这个样子的...");
}
public void beSelled() {
System.out.println("生产出的房子卖出去了...");
}
}
package com.cbf4life.implementor;
public class Clothes extends Product {
public void beProducted() {
System.out.println("生产出的衣服是这个样子的...");
}
public void beSelled() {
System.out.println("生产出的衣服卖出去了...");
}
}
package com.cbf4life.implementor
public class IPod extends Product {
public void beProducted() {
System.out.println("生产出的iPod是这个样子的...");
}
public void beSelled() {
System.out.println("生产出的iPod卖出去了...");
}
}
package com.cbf4life.abstraction;
import com.cbf4life.implementor.Product;
public abstract class Corp {
private Product product;
public Corp(Product product){
this.product = product;
}
public void makeMoney(){
this.product.beProducted();
this.product.beSelled();
}
}
package com.cbf4life.abstraction;
import com.cbf4life.implementor.House;
public class HouseCorp extends Corp {
public HouseCorp(House house){
super(house);
}
public void makeMoney(){
super.makeMoney();
System.out.println("房地产公司赚大钱了...");
}
}
package com.cbf4life.abstraction;
import com.cbf4life.implementor.Product;
public class ShanZhaiCorp extends Corp {
public ShanZhaiCorp(Product product){
super(product);
}
public void makeMoney(){
super.makeMoney();
System.out.println("我赚钱呀...");
}
}
:
package com.cbf4life;
import com.cbf4life.abstraction.HouseCorp;
import com.cbf4life.abstraction.ShanZhaiCorp;
import com.cbf4life.implementor.Clothes;
import com.cbf4life.implementor.House;
public class Client {
public static void main(String[] args) {
House house = new House();
System.out.println("-------房地产公司是这个样子运行的-------");
HouseCorp houseCorp =new HouseCorp(house);
houseCorp.makeMoney();
System.out.println("\n");
System.out.println("-------山寨公司是这样运行的-------");
ShanZhaiCorp shanZhaiCorp = new ShanZhaiCorp(new Clothes());
shanZhaiCorp.makeMoney();
}
}
package com.cbf4life;
import com.cbf4life.abstraction.HouseCorp;
import com.cbf4life.abstraction.ShanZhaiCorp;
import com.cbf4life.implementor.House;
import com.cbf4life.implementor.IPod;
public class Client {
public static void main(String[] args) {
House house = new House();
System.out.println("-------房地产公司是这个样子运行的-------");
HouseCorp houseCorp =new HouseCorp(house);
houseCorp.makeMoney();
System.out.println("\n");
System.out.println("-------山寨公司是这样运行的-------");
//ShanZhaiCorp shanZhaiCorp = new ShanZhaiCorp(new Clothes());
ShanZhaiCorp shanZhaiCorp = new ShanZhaiCorp(new IPod());//,就修改了这一一句话代码就完成了生产产品的转换
shanZhaiCorp.makeMoney();
}
}