总体来说设计模式分为三大类:
创建型模式5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式7种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式11种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
桥接模式
①将抽象部分与实现部分分离,使它们都可以独立的变化;
②所谓抽象和实现沿着各自维度的变化,即“子类化”它们,得到各个子类之后,便可以任意它们,从而获得不同路上的不同汽车;
③类似于多继承方案,但是多继承方案往往违背了类的单一职责原则(即一个类只有一个变化的原因),复用性比较差。桥接模式是比多继承方案更好的解决方法。
Demo:交通案例
首先,创建抽象类
abstract class AbstractCar{//汽车的基类
void run(){};
}
abstract class AbstractRoad{//路的基类
AbstractCar aCar;
void run(){};
}
abstract class People {//人的基类
AbstractRoad road;
void run() {}
}
其次,创建子类
class Car extends AbstractCar{//继承车的基类,创建小汽车类
@Override
void run() {
// TODO Auto-generated method stub
super.run();
System.out.print("小汽车");
}
}
class Bus extends AbstractCar{//继承车的基类,创建公交车
@Override
void run() {
// TODO Auto-generated method stub
super.run();
System.out.print("公交车");
}
}
class Street extends AbstractRoad{//继承路的基类,创建街道类
@Override
void run() {
super.run();
aCar.run();
System.out.println("在市区街道行驶");
}
}
class SpeedWay extends AbstractRoad{//继承了路的基类,创建高速公路类
@Override
void run() {
super.run();
aCar.run();
System.out.println("在高速公路行驶");
}
}
class Man extends People{//继承了人的基类,创建Man类
@Override
void run() {
super.run();
System.out.print("男人开着");
road.run();
}
}
class Woman extends People{//继承了人的基类,创建Woman类
@Override
void run() {
super.run();
System.out.print("女人开着");
road.run();
}
}
然后,创建测试类
class Test{
public static void main(String[] args) {
People man = new Man();
AbstractRoad speedWay = new SpeedWay();
speedWay.aCar = new Car();
man.road = speedWay;
man.run();
}
}
最后,查看输出结果
小汽车在在高速公路行驶
男人开着