设计模式笔记之七 (桥接模式)

桥接模式

桥接模式就是把影响事物对象的多个因素抽象出来从而使两者解偶,那么就能动态的加载变化的因素。

好吧,这个定义很抽象,我们还是来聊下具体的事物。

最近我们实验室因为一系列的设计模式改进,所以竞争力和盈利都有了长足的发展,所以老总们就计划着冲出亚洲,走向全球了。但是我们以前生产的男人女人都是黑发黄肤的东方系列产品,现在要打入欧美市场,我们就必须要生产金发白肤的西方系列产品,所以我们就定制了各自的产品模板:

class Ren {
}

class NanRen extends Ren {
    public String gender  = "男";
    public String hair  = "";
    public String skin  = "";
}

class NvRen extends Ren {
    public String gender  = "女";
}

class DongFangNanRen extends NanRen {
    public String hair  = "黑色";
    public String skin  = "黄肤";
    public void build() {
        System.out.println("性别:" + gender + ", 特征:" + hair + ", " + skin);
    }
}
class XiFangNanRen extends NanRen {
    public String hair  = "金色";
    public String skin  = "白肤";
    public void build() {
        System.out.println("性别:" + gender + ", 特征:" + hair + ", " + skin);
    }
}
class DongFangNvRen extends NvRen {
    public String hair  = "黑色";
    public String skin  = "黄肤";
    public void build() {
        System.out.println("性别:" + gender + ", 特征:" + hair + ", " + skin);
    }
}
class XiFangNvRen extends NvRen {
    public String hair  = "金色";
    public String skin  = "白肤";
    public void build() {
        System.out.println("性别:" + gender + ", 特征:" + hair + ", " + skin);
    }
}

public class Bridge {
    public static void main(String[] args) {
        new XiFangNvRen().build();
        new DongFangNvRen().build();
        new XiFangNanRen().build();
        new DongFangNanRen().build();
    }
}

这时人妖工厂的厂长说人妖也要打入欧美市场,正常人工厂的厂长说我们不仅仅要打入欧美市场,还得打入非洲和印度市场。

我们的模具制造哥一听立马晕倒,倒地前大吼一句,要3X4个模具让哥加班加死吧。

就在这时,我们的资深顾问提出了一种解决方案来解救模具制造哥:

既然我们的"人"产品需要一些头发和皮肤的"特征",而头发和皮肤的特征会不时的改变,我们何不将"人"和"特征"分离开来,"人"只需要知道自己要有一些"特征",至于"特征"是什么样的,到用户使用的时候用户给"人"赋予自己所需要的"特征"就行。

class Ren {
    TeZhen tz;
    public void setTeZhen(TeZhen tz) {
        this.tz = tz;
    }
}

class NanRen extends Ren {
    public String gender  = "男";
    public void build() {
        System.out.println("性别:" + gender + ", 特征:" + tz.getHair() + ", " + tz.getSkin());
    }
}

class NvRen extends Ren {
    public String gender  = "女";
    public void build() {
        System.out.println("性别:" + gender + ", 特征:" + tz.getHair() + ", " + tz.getSkin());
    }
}

interface TeZhen {
    public abstract String getHair();

    public abstract String getSkin();
}

class DongFangTeZhen implements TeZhen {

    @Override
    public String getHair() {
        return "黑色";
    }

    @Override
    public String getSkin() {
        return "黄肤";
    }

}

class XiFangTeZhen implements TeZhen {

    @Override
    public String getHair() {
        return "金色";
    }

    @Override
    public String getSkin() {
        return "白肤";
    }

}

public class Bridge {
    public static void main(String[] args) {
        NvRen nvren = new NvRen(); //创建一个女人
        
        TeZhen df = new DongFangTeZhen();// 生产一个东方特征
        nvren.setTeZhen(df); // 将东方特征赋予一个女人
        nvren.build(); // 这就是我们需要的东方女人
        
        TeZhen xf = new XiFangTeZhen();
        nvren.setTeZhen(xf);//我们还可以给同一个人换上西方特征来满足我们一些特殊的需求
        nvren.build();
        
    }
}

这样设计就解决了我们模具制造哥的问题,不过也让我们的模具制造哥失业了,因为进入非洲及印度市场的时候,我们只需要加上两种特征就行了。

class FezhouTeZhen implements TeZhen {

    @Override
    public String getHair() {
        return "黑色";
    }

    @Override
    public String getSkin() {
        return "黑肤";
    }

}

class YingDuTeZhen implements TeZhen {

    @Override
    public String getHair() {
        return "黑色";
    }

    @Override
    public String getSkin() {
        return "棕肤";
    }

}

现在全球都是我们的市场,并且很多人买了一个"人"和多个"特征"来满足不同时间段的需要。

 

posted @ 2013-05-15 13:58  biglaojiang  阅读(1413)  评论(3编辑  收藏  举报