注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天涯倦客的博客

祝福你朋友永远快乐!

 
 
 

日志

 
 

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

2013-05-24 17:14:32|  分类: 设计模式 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

桥接模式

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

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

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

复制代码
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 "棕肤";
    }

}
复制代码

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

 

绿色通道: 好文要顶
转载:http://www.cnblogs.com/biglaojiang/archive/2013/05/15/3079742.html
  评论这张
 
阅读(403)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017