zoukankan      html  css  js  c++  java
  • 设计模式笔记之七 (桥接模式)

    桥接模式

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

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

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

    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 "棕肤";
        }
    
    }

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

  • 相关阅读:
    【NLP之文本摘要】4_oov和word repetition问题
    【文本摘要项目】5性能提升之PGN模型
    案例学习Transformer 及其实现细节]
    【NLP之文本摘要】3NLG过程及其优化与模型评估
    案例学习理解语言的 Transformer 模型
    【文本摘要项目】4解码算法及模型测试结果评估
    【NLP之文本摘要】5_transformer模型初级探索
    【文本摘要项目】6性能提升之Transformer模型
    【文本摘要项目】7性能提升之基于Transformer的PGN模型
    指针作为参数传入函数的陷阱
  • 原文地址:https://www.cnblogs.com/biglaojiang/p/3079742.html
Copyright © 2011-2022 走看看