桥接方式与纯java方式连接的不同点_Java桥接模式实例详解【简单版与升级版】...

本文实例讲述了Java桥接模式。分享给大家供大家参考,具体如下:

桥接模式简单版

一 代码

class Meal

{

protected MealImp imp;

public Meal()

{

imp = new AmericanMealImp();

}

public Meal(String type)

{

if (type.equals("American"))

imp = new AmericanMealImp();

if (type.equals("Italian"))

imp = new ItalianMealImp();

}

public void getFirstCourse() {

imp.getAppetizer();

}

public void getSecondCourse() {

imp.getMeat();

}

public void getBeverage() {

imp.getBeverage();

}

public void getDessert() {

imp.getDessert();

}

}

interface MealImp {

public abstract void getAppetizer();

public abstract void getSoup();

public abstract void getSalad();

public abstract void getFish();

public abstract void getMeat();

public abstract void getSorbet();

public abstract void getPasta();

public abstract void getBeverage();

public abstract void getDessert();

public abstract void getSandwich();

}

class AmericanMealImp implements MealImp {

public void getAppetizer() {

System.out.println("开胃菜 : 烤干酪"); }

public void getSoup() {}

public void getSalad() {}

public void getFish() {}

public void getMeat() {

System.out.println("肉食 :牛排"); }

public void getPasta() {}

public void getBeverage() {

System.out.println("酒水 :啤酒"); }

public void getDessert() {

System.out.println("餐后甜点:苹果派"); }

public void getSorbet() {}

public void getSandwich() {}

}

class ItalianMealImp implements MealImp {

public void getAppetizer() {

System.out.println("开胃菜: 意大利蔬菜拼盘"); }

public void getSoup() {}

public void getSalad() {}

public void getFish() {}

public void getMeat() {

System.out.println("肉食: 意大利柠檬香煎鸡排"); }

public void getPasta() {}

public void getCheesePlate() {}

public void getBeverage() {

System.out.println("酒水: 卡布奇诺咖啡"); }

public void getDessert() {

System.out.println("餐后甜点: 冰淇淋"); }

public void getSorbet() {}

public void getSandwich() {}

}

public class CustomerBridgeDemo {

private Meal meal;

public CustomerBridgeDemo(Meal aMeal) { meal = aMeal; }

public void eat() {

meal.getFirstCourse();

meal.getSecondCourse();

meal.getBeverage();

meal.getDessert();

}

public static void main(String[] args) {

Meal aMeal = null;

if (args.length == 0) {

aMeal = new Meal();

}

else if (args.length == 1) {

if (!(args[0].equals("American")) && !(args[0].equals("Italian")) ) {

System.err.println("输入参数有误!");

System.err.println("正确用法: java Customer [American|Italian]");

System.exit(1);

}

else {

aMeal = new Meal(args[0]);

}

}

else { // error

System.err.println("输入参数有误!");

System.err.println("正确用法: java Customer [American|Italian]");

System.exit(1);

}

CustomerBridgeDemo cus = new CustomerBridgeDemo(aMeal);

cus.eat();

}

}

二 运行

开胃菜    : 烤干酪

肉食        :牛排

酒水        :啤酒

餐后甜点:苹果派

三 类图

d978b586c34fa71347bd22ad10f2a5f3.png

桥接模式升级版

一 代码

class Meal {

protected MealImp imp;

public Meal() {

imp = new AmericanMealImp();

}

public Meal( String type ) {

if (type.equals("American"))

imp = new AmericanMealImp();

if (type.equals("Italian"))

imp = new ItalianMealImp();

}

public void getFirstCourse() {

imp.getAppetizer();

}

public void getSecondCourse() {

imp.getMeat();

}

public void getBeverage() {

imp.getBeverage();

}

public void getDessert() {

imp.getDessert();

}

}

interface MealImp {

public abstract void getAppetizer();

public abstract void getSoup();

public abstract void getSalad();

public abstract void getFish();

public abstract void getMeat();

public abstract void getSorbet();

public abstract void getPasta();

public abstract void getBeverage();

public abstract void getDessert();

public abstract void getSandwich();

}

class AmericanMealImp implements MealImp {

public void getAppetizer() {

System.out.println("开胃菜 : 烤干酪");

}

public void getSoup() {

}

public void getSalad() {

}

public void getFish() {

}

public void getMeat() {

System.out.println("肉食 :牛排");

}

public void getPasta() {

}

public void getBeverage() {

System.out.println("酒水 :啤酒");

}

public void getDessert() {

System.out.println("餐后甜点:苹果派");

}

public void getSorbet() {

}

public void getSandwich() {

}

}

class ItalianMealImp implements MealImp {

public void getAppetizer() {

System.out.println("开胃菜: 意大利蔬菜拼盘");

}

public void getSoup() {

}

public void getSalad() {

}

public void getFish() {

}

public void getMeat() {

System.out.println("肉食: 意大利柠檬香煎鸡排");

}

public void getPasta() {

}

public void getCheesePlate() {

}

public void getBeverage() {

System.out.println("酒水: 卡普齐诺咖啡");

}

public void getDessert() {

System.out.println("餐后甜点: 冰淇淋");

}

public void getSorbet() {

}

public void getSandwich() {

}

}

class Snack extends Meal {

Snack() {

super();

}

Snack( String type ) {

super(type);

}

public void getSnack() { //甜点

imp.getAppetizer();

}

}

class Lunch extends Meal {

Lunch() {

super();

}

Lunch( String type ) {

super(type);

}

public void getLunch() { //午餐

imp.getSandwich(); //三明治

imp.getBeverage(); //饮品

}

}

class FiveCourseMeal extends Meal {

FiveCourseMeal() {

super();

}

FiveCourseMeal( String type ) {

super(type);

}

public void getEnormousDinner() { //大餐

imp.getAppetizer(); //开胃菜

imp.getSorbet(); //果汁冰水

imp.getSoup(); //汤

imp.getSorbet(); //果汁冰水

imp.getSalad(); //沙拉

imp.getSorbet(); //果汁冰水

imp.getFish(); //鱼

imp.getSorbet(); //果汁冰水

imp.getMeat(); //肉

imp.getDessert(); //果汁冰水

imp.getBeverage(); //酒水

}

}

public class CustomerBridgeDemo2 {

private FiveCourseMeal bigMeal;

public CustomerBridgeDemo2( FiveCourseMeal meal ) {

this.bigMeal = meal;

}

public void eat() {

bigMeal.getEnormousDinner();

bigMeal.getDessert(); //单点一个甜点,老菜谱依然有效

}

public static void main( String[] args ) {

FiveCourseMeal aMeal = null;

if (args.length == 0) {

aMeal = new FiveCourseMeal();

} else if (args.length == 1) {

if (!(args[0].equals("American")) && !(args[0].equals("Italian"))) {

System.err.println("输入参数有误!");

System.err.println("正确用法: java Customer [American|Italian]");

System.exit(1);

} else {

aMeal = new FiveCourseMeal(args[0]);

}

} else {

System.err.println("输入参数有误!");

System.err.println("正确用法: java Customer [American|Italian]");

System.exit(1);

}

CustomerBridgeDemo2 cus = new CustomerBridgeDemo2(aMeal);

cus.eat();

}

}

二 运行

开胃菜    : 烤干酪

肉食        :牛排

餐后甜点:苹果派

酒水        :啤酒

餐后甜点:苹果派

三 类图

a09e418cec34bf91a90067fc791bc309.png

希望本文所述对大家java程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴为您提供有关桥接模式Java项目实例桥接模式是一种结构性设计模式,可用于将抽象与实现解耦。 以下是一个简单桥接模式Java项目实例: 1.先定义一个 Shape 接口和一个 Drawing 接口,如下所示: ```java public interface Shape { public void draw(); } public interface Drawing { public void drawCircle(int x, int y, int radius); public void drawRectangle(int x1, int y1, int x2, int y2); } ``` 2.然后实现具体的 Shape 类和 Drawing 类,如下所示: ```java public class CircleShape implements Shape { private int x, y, radius; private Drawing drawing; public CircleShape(int x, int y, int radius, Drawing drawing) { this.x = x; this.y = y; this.radius = radius; this.drawing = drawing; } public void draw() { drawing.drawCircle(x, y, radius); } } public class RectangleShape implements Shape { private int x1, y1, x2, y2; private Drawing drawing; public RectangleShape(int x1, int y1, int x2, int y2, Drawing drawing) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; this.drawing = drawing; } public void draw() { drawing.drawRectangle(x1, y1, x2, y2); } } public class DrawingImpl implements Drawing { public void drawCircle(int x, int y, int radius) { System.out.println("Drawing circle at (" + x + ", " + y + ") with radius " + radius); } public void drawRectangle(int x1, int y1, int x2, int y2) { System.out.println("Drawing rectangle from (" + x1 + ", " + y1 + ") to (" + x2 + ", " + y2 + ")"); } } ``` 3.最后,我们可以使用这些类来画出不同的形状,如下所示: ```java public static void main(String[] args) { Drawing drawing = new DrawingImpl(); Shape circle = new CircleShape(10, 10, 5, drawing); circle.draw(); Shape rectangle = new RectangleShape(20, 20, 30, 30, drawing); rectangle.draw(); } ``` 这是一个简单桥接模式Java项目实例。它演示了如何将抽象和实现分离,使得它们可以独立进行扩展。当我们需要添加新的形状或绘图方式时,只需要实现相应的类即可,而不用改变现有类的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值