作者:因情语写
链接:https://www.proprogrammar.com/article/444
声明:请尊重原作者的劳动,如需转载请注明出处
要组合几个对象,这几个对象又都会变化,把几个对象关联起来,可以用桥接模式
看例子:人,车,路,人开车在路在行驶,人,车,路都可以变化
首先是人
package constructional.pattern.bridge;
public interface People {
void run();
}
package constructional.pattern.bridge;
public class Man implements People {
private Road road;
public Man(Road road) {
super();
this.road = road;
}
@Override
public void run() {
System.out.print("man on the ");
road.run();
}
}
package constructional.pattern.bridge;
public class Woman implements People {
private Road road;
public Woman(Road road) {
super();
this.road = road;
}
@Override
public void run() {
System.out.print("woman on the ");
road.run();
}
}
下面是路
package constructional.pattern.bridge;
public interface Road {
void run();
}
package constructional.pattern.bridge;
public class HighSpeedRoad implements Road {
private Vehicle vehicle;
public HighSpeedRoad(Vehicle vehicle) {
super();
this.vehicle = vehicle;
}
@Override
public void run() {
System.out.print("highspeed road run the ");
vehicle.run();
}
}
package constructional.pattern.bridge;
public class Street implements Road {
private Vehicle vehicle;
public Street(Vehicle vehicle) {
super();
this.vehicle = vehicle;
}
@Override
public void run() {
System.out.print("street road run the ");
vehicle.run();
}
}
最后是车
package constructional.pattern.bridge;
public interface Vehicle {
void run();
}
package constructional.pattern.bridge;
public class Car implements Vehicle {
@Override
public void run() {
System.out.println("car.");
}
}
package constructional.pattern.bridge;
public class Bus implements Vehicle {
@Override
public void run() {
System.out.println("bus.");
}
}
如何组合
package constructional.pattern.bridge;
public interface RunFactory {
int MAN = 1;
int WOMAN = 0;
int STREET = 1;
int HIGHSPEEDROAD = 2;
int BUS = 1;
int CAR = 2;
People getRun(int people, int road, int vehicle);
Road getRun(int road, int vehicle);
Vehicle getRun(int vehicle);
}
package constructional.pattern.bridge;
public class RunFactoryImp implements RunFactory {
@Override
public People getRun(int people, int road, int vehicle) {
if(people == RunFactory.MAN)
{
return new Man(getRun(road, vehicle));
}
else if(people == RunFactory.WOMAN)
{
return new Woman(getRun(road, vehicle));
}
return null;
}
@Override
public Road getRun(int road, int vehicle) {
if(road == RunFactory.HIGHSPEEDROAD)
{
return new HighSpeedRoad(getRun(vehicle));
}
else if(road == RunFactory.STREET)
{
return new Street(getRun(vehicle));
}
return null;
}
@Override
public Vehicle getRun(int vehicle) {
if(vehicle == RunFactory.BUS)
{
return new Bus();
}
else if(vehicle == RunFactory.CAR)
{
return new Car();
}
return null;
}
}
看一下测试代码
package constructional.pattern.bridge;
public class Client {
public static void main(String[] args) {
int v1 = 1;
int v2 = 2;
int r1 = 1;
int r2 = 2;
int p0 = 0;
int p1 = 1;
RunFactory runFactory = new RunFactoryImp();
People pp1 = runFactory.getRun(p1, r1, v1);
pp1.run();
People pp2 = runFactory.getRun(p1, r1, v2);
pp2.run();
People pp3 = runFactory.getRun(p0, r2, v1);
pp3.run();
}
}
下面是运行结果
亲爱的读者:有时间可以点赞评论一下
月份 | 原创文章数 |
---|---|
202206 | 4 |
202205 | 2 |
202204 | 1 |
202203 | 11 |
202201 | 2 |
202108 | 7 |
202107 | 3 |
202106 | 16 |
202105 | 10 |
202104 | 16 |
202103 | 56 |
202102 | 14 |
202010 | 3 |
202009 | 3 |
202008 | 7 |
202007 | 7 |
202006 | 10 |
202005 | 11 |
202004 | 22 |
202003 | 52 |
202002 | 44 |
202001 | 83 |
201912 | 52 |
201911 | 29 |
201910 | 41 |
201909 | 99 |
201908 | 35 |
201907 | 73 |
201906 | 121 |
201811 | 1 |
201810 | 2 |
201804 | 1 |
201803 | 1 |
201802 | 1 |
201707 | 1 |
全部评论