Java笔记-Java中桥接模式

Posted IT1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java笔记-Java中桥接模式相关的知识,希望对你有一定的参考价值。

最近在研究一个APP,逆向后发现貌似用了桥接模式,特意学习了下Java中的桥接模式。

关于C++的桥接链接如下:

https://blog.csdn.net/qq78442761/article/details/98877170

 

下面是java相关的代码以及自己的新理解!

首先设计模式代表外招功法,是外招的模板,个人觉得他是为面向对象7个原则而准备的:

面向对象程序设计要考虑7个原则:

单一职责原则:设计目的单一的类;

开放封闭原则:对扩展开发,对修改封闭;

李氏替换原则:子类可以替换父类;

依赖倒置原则:要依赖于抽象,不依赖于具体,面向接口的编程;

接口隔离原则:使用多个专用的接口比使用单一的接口要好;

组合重用原则:尽可能使用组合,而非继承;

迪米特原则:一个对象尽可能少的了解其他对象。

 

通过这7个原则,创建起来的设计模式。

 

关键UML图如下:

Weapon是一个接口,Persion是一个抽象类,他的子类有男人和女人,而weapon的实现是Sword和Gun。

 

各个代码是这样的:

Person.java

package cn.example;

public abstract class Person {

    protected Weapon weapon;

    protected Person(Weapon weapon) {

        this.weapon = weapon;
    }

    public void todoSomething(){

        weapon.attack();
    }

    public void changeWeapon(Weapon weapon){

        this.weapon = weapon;
    }
}

Weapon.java

package cn.example;

public interface Weapon {

    void attack();
}

Man.java

package cn.example;

public class Man extends Person{

    public Man(Weapon weapon) {

        super(weapon);
    }

    @Override
    public void todoSomething() {

        weapon.attack();
    }
}

Woman.java

package cn.example;

public class Woman extends Person{

    public Woman(Weapon weapon) {

        super(weapon);
    }

    @Override
    public void todoSomething() {

        weapon.attack();
    }
}

Gun.java

package cn.example;

public class Gun implements Weapon {

    private String name;
    private Integer value;
    private Integer scope;

    public Gun(String name, Integer value, Integer scope) {

        this.name = name;
        this.value = value;
        this.scope = scope;
    }

    public void attack() {

        System.out.println(this + ", name:" + name +  ", value:" + value + ", scope:" + scope);
    }
}

Sword.java

package cn.example;

public class Sword implements Weapon {

    private String name;
    private Integer value;
    private Integer scope;

    public Sword(String name, Integer value, Integer scope) {

        this.name = name;
        this.value = value;
        this.scope = scope;
    }

    public void attack() {

        System.out.println(this + ", name:" + name +  ", value:" + value + ", scope:" + scope);
    }
}

这里的Main函数是这样的:

package cn.example;

public class Main {

    public static void main(String[] args) {

        System.out.println("start ...... ...... ......");

        System.out.println("Jack和Tom一人一把黄金装备");
        Sword gold_sword = new Sword("Gold Sword", 100, 2);
        Gun gold_gun = new Gun("Gold Sword", 80, 6);
        Person Jack = new Man(gold_sword);
        Person Tom = new Man(gold_gun);

        Jack.todoSomething();
        Tom.todoSomething();

        System.out.println("来了一个不带装备的女士");
        Person Sofia = new Woman(null);
        Sofia.changeWeapon(gold_sword);
        System.out.println("换上了黄金剑");
        Sofia.todoSomething();

        System.out.println("换上了黄金枪");
        Sofia.changeWeapon(gold_gun);
        Sofia.todoSomething();

        System.out.println("end ...... ..... ......");
    }
}

程序运行截图如下:

模拟的是这样的一个场景,有一个名叫jack的男人,他带有一把黄金剑,有一个名叫Tom的男人,他有一把黄金枪,现在有多了个叫Sofia的女人,她什么武器都没有,但她可以用黄金剑和黄金枪。

 

源码打包下载地址:

https://github.com/fengfanchen/Java/tree/master/JavaBridge

 

以上是关于Java笔记-Java中桥接模式的主要内容,如果未能解决你的问题,请参考以下文章

swift Swift中桥接模式的示例

vmware中桥接模式,NAT模式,主机模式的区别

VMware中桥接模式,NAT,仅主机的区别

VMWare中桥接NATHost-only

centos中桥接设置静态ip地址

论文泛读124在自然语言生成的 Pretrain-Finetune 范式中桥接子词间隙