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中桥接模式的主要内容,如果未能解决你的问题,请参考以下文章