zoukankan      html  css  js  c++  java
  • 大白话 设计模式之桥连模式

    定义

    桥接模式(bridge):将抽象部分与实现部分分离,使它们都可以独立的变化.
    

    从定义来看,抽象的简直看不了,那么通俗点讲,我们怎么理解桥接模式呢?

    我们再举一个例子,假设你是一个地主,你有两个管家,两个工人,那么每天你怎么指挥他们呢,你可以告诉管家A让工人1去干活,同时也可以告诉管家B让工人2去工作,或者管家A去指挥工人2,管家B去指挥工人1, 你可以自由组合这种变化,管家和工人之间也没有什么依赖,他们都可以独立的变化,那么我们再把管家和工人的职责和具体的人再分离,是不是就印证了定义呢? 将抽象部分和实现部分分离,使他们都可以独立的变化? 那么我们就实现了一个桥接模式了.

    好像还是有点绕,那么我们来看看具体代码怎么去实现:

    首先,我们先抽象一个管家的职责,这个管家的职责,就是管理工人工作:

    public abstract class HouseKeep{
    protected Work work;
    
    public HouseKeep(Work work) {
        this.work = work;
    }
    
    void manage() {
        this.work.work();
    }
    }
    

    接下来我们实现A和B两个管家:

    public class HouseKeeperA extends HouseKeep {
    public HouseKeeperA(Work work) {
    	super(work);
    }
    
    public void manage() {
    	System.out.println("管家A指派");
    	super.manage();
    }
    }
    
    public class HouseKeeperB extends HouseKeep {
    
    public HouseKeeperB(Work work) {
    	super(work);
    }
    
    public void manage() {
    	System.out.println("管家B指派");
    	super.manage();
    }
    }
    

    接着我们抽象一个工人的职责,工人的职责当然就是工作了:

    public interface Work {
    void work();
    }
    

    再接着我们实现两个工作的工人:

    public class woker1 implements Work {
    public void work() {
    System.out.println("工人1工作");
    }	
    }
    
    public class worker2 implements Work {
    	public void work() {
    	System.out.println("工人2工作");
    	}
    	
    }
    

    好了,现在我们就可以随心所意的指挥他们了:

    public class clinet {
    
    public static void main(String[] args) {
    	//你让管家A指挥工人1
        HouseKeep keep = new HouseKeeperA(new woker1());
        keep.manage();
    
    	//你让管家A指挥工人2
        keep = new HouseKeeperA(new worker2());
        keep.manage();
    
    	//你让管家B指挥工人1
        keep = new HouseKeeperB(new woker1());
        keep.manage();
    
    	//你让管家B指挥工人2
        keep = new HouseKeeperB(new worker2());
        keep.manage();
    }
    }
    

    来让我们看看他们都还听话吗:

    管家A指派工人1工作
    管家A指派工人2工作
    管家B指派工人1工作
    管家B指派工人2工作
    

    结果还不错,我们把具体的工作和工作的人做了分离,并且可以让他们随意的组合,独立的变化,那么这不就是桥接模式吗?

  • 相关阅读:
    持续交付知易行难,想做成这事你要理解这几个关键点
    运维需要懂产品和运营吗?
    云计算和AI时代,运维应该如何做好转型?
    从谷歌CRE谈起,运维如何培养服务意识?
    谷歌SRE运维模式解读
    如何打造好运维组织架构?
    如何在CMDB中落地应用的概念?
    有了CMDB,为什么还需要应用配置管理?
    Vue视图渲染原理解析,从构建VNode到生成真实节点树
    10个Vue开发技巧助力成为更好的工程师(二)
  • 原文地址:https://www.cnblogs.com/j2eeDevelper/p/5203906.html
Copyright © 2011-2022 走看看