java Bridge 桥接模式

Bridge模式的概念
Bridge模式是构造型的设计模式之一。Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。

 

意图:将一组实现与另一组使用他们的对象分离

问题:一个抽象类派生类 必须使用多个实现 ,但出现类数量增长

尽量用最简单的例子来说明:我来小的时候画图,画图,画三角形,长方形,还有不同颜色的铅笔来填色,要完成这样一个简单的任务。

假如我们为每种形状设计一个类,每种颜色设计一种类,那图案的种类将是恐怖级的,假如有十种图形,十种颜色,将会出现一百种组合,要能表示所有的图案,将至少要一百个类。

Bridge模式可以很好的解决这类问题。

Client
    Bridge模式的使用者
Abstraction
    抽象类接口(接口或抽象类)
    维护对行为实现(Implementor)的引用
Refined Abstraction
    Abstraction子类
Implementor
    行为实现类接口 (Abstraction接口定义了基于Implementor接口的更高层次的操作)
ConcreteImplementor
    Implementor子类

把象和实现分离开来,把填充颜色的行为抽象为一个接口:

 

 //填充颜色行为抽象成接口

public interface FixColor {
        public void daub();      //涂上颜色方法
}

//涂上绿色颜色
public class FixGreen implements FixColor{
    public void daub(){
      System.out.println("daub green");
    }

}

 

public class FixRed implements FixColor{
    public void daub(){
          System.out.println("daub red");
        }

}

 

//抽象形装  填充颜色属性和 着色方法
public abstract class  Shape {
     FixColor oneColor;
     public   abstract   void doColor();
}

 

public class Circle extends Shape{
      public void setColer(FixColor fixcolor ){
         this.oneColor=fixcolor;
      }
      public void  doColor(){
         oneColor.daub();         //涂上一种颜色
      }

}

别的图形省略........

 

public class Cilent {
    public static void main(String[] args){
        Circle circle= new Circle();
        FixGreen green =new  FixGreen();
        circle.setColer(green);
       
        circle.doColor();

 

    }
}

桥接模式关键是把抽象与行为实现相分离,动态结合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
桥接模式Bridge Pattern)是一种结构型设计模式,它将抽象与实现分离开来,使得它们可以独立地变化。在桥接模式中,抽象和实现可以各自扩展,而不会相互影响。这种模式适用于需要跨越多个平台或多个实现细节的情况。 在电商领域中,桥接模式可以用于处理商品的展示和销售。具体来说,可以定义一个抽象类 `Product`,它包含商品的基本属性和方法,如名称、价格、描述、图片等。然后,针对不同的商品类型(如服装、数码产品、食品等),创建具体的子类,并实现各自的特有属性和方法。 同时,为了处理不同平台(如PC端、移动端等)的展示和销售,可以定义一个抽象类 `Platform`,它包含展示商品、下单购买等方法。然后,具体的平台实现类可以继承 `Platform` 抽象类,并实现各自的展示和销售方法。 为了将商品和平台进行桥接,可以定义一个桥接接口 `ProductDisplay`,它包含一个展示商品的方法 `display()`,接口实现类中需要持有 `Product` 和 `Platform` 的引用,并在 `display()` 方法中将它们结合起来展示商品。 下面是一个简单的示例代码: ```java // 商品抽象类 public abstract class Product { protected String name; protected double price; protected String description; protected String image; public Product(String name, double price, String description, String image) { this.name = name; this.price = price; this.description = description; this.image = image; } public abstract void showDetails(); } // 服装商品类 public class ClothingProduct extends Product { private String size; private String color; public ClothingProduct(String name, double price, String description, String image, String size, String color) { super(name, price, description, image); this.size = size; this.color = color; } @Override public void showDetails() { System.out.println("Clothing Product: " + name + ", Price: " + price + ", Size: " + size + ", Color: " + color); } } // 数码产品类 public class DigitalProduct extends Product { private String brand; private String model; public DigitalProduct(String name, double price, String description, String image, String brand, String model) { super(name, price, description, image); this.brand = brand; this.model = model; } @Override public void showDetails() { System.out.println("Digital Product: " + name + ", Price: " + price + ", Brand: " + brand + ", Model: " + model); } } // 平台抽象类 public abstract class Platform { public abstract void showProduct(Product product); public abstract void purchase(Product product); } // PC平台类 public class PCPlatform extends Platform { @Override public void showProduct(Product product) { System.out.println("PC Platform: Showing product " + product.name + ", Price: " + product.price); } @Override public void purchase(Product product) { System.out.println("PC Platform: Purchasing product " + product.name + ", Price: " + product.price); } } // 移动端平台类 public class MobilePlatform extends Platform { @Override public void showProduct(Product product) { System.out.println("Mobile Platform: Showing product " + product.name + ", Price: " + product.price); } @Override public void purchase(Product product) { System.out.println("Mobile Platform: Purchasing product " + product.name + ", Price: " + product.price); } } // 桥接接口 public interface ProductDisplay { void display(); } // 桥接实现类 public class ProductDisplayImpl implements ProductDisplay { private Product product; private Platform platform; public ProductDisplayImpl(Product product, Platform platform) { this.product = product; this.platform = platform; } @Override public void display() { product.showDetails(); platform.showProduct(product); platform.purchase(product); } } // 示例代码 public class Client { public static void main(String[] args) { Product product = new ClothingProduct("T-shirt", 29.99, "A short-sleeved T-shirt", "t-shirt.jpg", "M", "Red"); Platform platform = new PCPlatform(); ProductDisplay productDisplay = new ProductDisplayImpl(product, platform); productDisplay.display(); System.out.println(); product = new DigitalProduct("Smartphone", 999.99, "A high-end smartphone", "smartphone.jpg", "Apple", "iPhone X"); platform = new MobilePlatform(); productDisplay = new ProductDisplayImpl(product, platform); productDisplay.display(); } } ``` 在上面的代码中,我们定义了两种商品类型(服装和数码产品)和两种平台类型(PC端和移动端),并使用桥接模式将它们进行了桥接。在客户端代码中,我们创建了不同种类的商品和平台对象,并通过桥接接口将它们结合起来展示和销售商品。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值