首页 > 其他分享 >桥接模式

桥接模式

时间:2023-01-03 10:34:16浏览次数:27  
标签:People 桥接 void 模式 public eatFruit Fruit eat


1、什么是桥接模式?

  变化部分与主类分离开来,从而将多个维度的变化彻底分离。最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。

  意图:

       将抽象部分与实现部分分离,使它们都可以独立的变化。

2、类图

桥接模式_桥接模式



3、代码类

1.Fruit类
package com.abp.bridge;

public abstract class Fruit {

/**
* 抽象方法
* @param People
* */

public abstract void eatFruit(People people);
}

package com.abp.bridge;

public abstract class Fruit {

/**
* 抽象方法
* @param People
* */

public abstract void eatFruit(People people);
}

这是一个抽象类,是所有水果的抽象,其中的一个抽象方法是对水果执行的动作,也就是将来我们需要对水果执行的操作,参数是人。


2.Apple类

package com.abp.bridge;

public class Apple extends Fruit{

@Override
public void eatFruit(People people) {
// TODO Auto-generated method stub
System.out.println(people.getType() + " eat apple !");
}

}

package com.abp.bridge;

public class Apple extends Fruit{

@Override
public void eatFruit(People people) {
// TODO Auto-generated method stub
System.out.println(people.getType() + " eat apple !");
}

}

3.Oranger类

package com.abp.bridge;

public class Oranger extends Fruit{

@Override
public void eatFruit(People people) {
// TODO Auto-generated method stub
System.out.println(people.getType() + " eat oranger !");
}

}

package com.abp.bridge;

public class Oranger extends Fruit{

@Override
public void eatFruit(People people) {
// TODO Auto-generated method stub
System.out.println(people.getType() + " eat oranger !");
}

}

这两个类都是水果类的具体实现,都代表的具体的东西,其中需要重载水果类中的抽象方法,且各自都有各自不同的实现。




4.People类

package com.abp.bridge;

public abstract class People {

private String type;
private Fruit fruit;


public String getType() {
return type;
}


public void setType(String type) {
this.type = type;
}


public Fruit getFruit() {
return fruit;
}


public void setFruit(Fruit fruit) {
this.fruit = fruit;
}

//抽象方法
public abstract void eat();


}

package com.abp.bridge;

public abstract class People {

private String type;
private Fruit fruit;


public String getType() {
return type;
}


public void setType(String type) {
this.type = type;
}


public Fruit getFruit() {
return fruit;
}


public void setFruit(Fruit fruit) {
this.fruit = fruit;
}

//抽象方法
public abstract void eat();

}

这个类是抽象的人,里面有两个参数,一个参数是水果,一个参数是类型(代表是男人或是女人)


5.Man类

package com.abp.bridge;

public class Man extends People{

public Man(){
setType("Man");
}

@Override
public void eat() {
// TODO Auto-generated method stub
getFruit().eatFruit(this);
}

}

package com.abp.bridge;
public class Man extends People{

public Man(){
setType("Man");
}

@Override
public void eat() {
// TODO Auto-generated method stub
getFruit().eatFruit(this);
}

}

6.Woman类

package com.abp.bridge;

public class Woman extends People{

public Woman(){
setType("Woman");
}

@Override
public void eat() {
// TODO Auto-generated method stub
getFruit().eatFruit(this);
}

}

package com.abp.bridge;

public class Woman extends People{

public Woman(){
setType("Woman");
}

@Override
public void eat() {
// TODO Auto-generated method stub
getFruit().eatFruit(this);
}

}

这两个类继承自People类,是具体的“人”,其中重写了父类方法,并在构造函数中说明是“什么人”

7.测试类--Main_Test

package com.abp.bridge;

public class Main_Test {

public static void main(String[] args) {

People man = new Man();
People woman = new Woman();

Fruit apple = new Apple();
Fruit oranger = new Oranger();

apple.eatFruit(man);
oranger.eatFruit(woman);
apple.eatFruit(woman);
oranger.eatFruit(man);
}
}

package com.abp.bridge;

public class Main_Test {

public static void main(String[] args) {

People man = new Man();
People woman = new Woman();

Fruit apple = new Apple();
Fruit oranger = new Oranger();

apple.eatFruit(man);
oranger.eatFruit(woman);
apple.eatFruit(woman);
oranger.eatFruit(man);
}
}

这里是对桥接模式的测试。

程序执行的结果如下:

Man eat apple !
Woman eat oranger !
Woman eat apple !
Man eat oranger !

Man eat apple !
Woman eat oranger !
Woman eat apple !
Man eat oranger !四、应用场景
1.如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。
2.设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的。
3.一个构件有多于一个的抽象化角色和实现化角色,系统需要它们之间进行动态耦合。
4.虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。

标签:People,桥接,void,模式,public,eatFruit,Fruit,eat
From: https://blog.51cto.com/u_15928064/5984682

相关文章

  • 原型模式
    概念:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。模式图:    原理图:  ​​​​      原型模式主要用于对象的复制,它的核心就是类图中的......
  • 抽象工厂模式
       概述:     抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式......
  • 单例模式和多例模式的总结
    学习交流关注微信公众号:钟渊博客今天开始学习设计模式之单例和多例单例模式的关键有两点:1.构造方法为私有,这样外界就不能随意调用。2.get的方法为静态,由类直接调用 多例模......
  • 适配器模式
    概述《设计模式》一书中对“适配器模式”的动机描述如下:将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的类可以一起工作......
  • 笔记本 AUTO模式是什么意思
    相关文章电脑AUTO是什么意思https://zhidao.baidu.com/question/1645428036244428940.html##简介电脑屏幕、显示器上的按键“AUTO”是用来自动校对屏幕显示的位置的按......
  • python设计模式
    设计模式设计模式中使用了一个接口类abc:AbstractBaseClasses作用:在代码中定义和使用抽象基类进行API检查。​为什么使用abc模块Abstractbaseclasses由一组接口组......
  • redis单节点与集群模式
    23.redis实战Dockerfileroot@k8s-master1:~/k8s-data/dockerfile/web/magedu/redis#catDockerfile#RedisImageFROMharbor.nbrhce.com/baseimages/centos:7.9.20......
  • 基于 Dojo toolkit 实现 web2.0 的 MVC 模式
    前言MVC模式是设计模式中的经典模式,它可以有效的分离数据层,展示层,和业务逻辑层。Web2.0技术由于其良好的用户体验被广泛应用于WEB应用的展示层。但是在传统的web开发......
  • 使用Qt和Interpreter设计模式开发计算器(附源码)
    计算器软件其实有很多种,但是基本上都是模仿计算器,用鼠标点击按键来操作,这次我们反其道而行之,采用类似文本输入的操作方式。功能1.键盘输入算式,回车后计算结果。2.根据当前......
  • KMP字符串模式匹配详解
    KMP字符串模式匹配详解KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法。可以证明它的时间复杂度......