• (十)桥接模式-代码实现


    介绍

    意图:将抽象部分与它的实现部分分离,使它们都可以独立地变化。

    使用场景:当一个接口中有多个方法定义,它的方法有多种有不同的实现,为了避免在子类中重复的定义相同的方法.

    代码:

    //剥离功能1接口

    package note.com.bridge;
    
    /**
     * 颜色接口
     * @author lxz
     *
     */
    public interface IColour {
        
        public void buildColour();
        
    }

    //功能1实现

    package note.com.bridge;
    
    public class Blue implements IColour{
    
        public void buildColour() {
            System.out.println("蓝色");
        }
    
    }
    package note.com.bridge;
    
    public class Red implements IColour{
    
        public void buildColour() {
            System.out.println("红色");
        }
    
    }

    //剥离功能2接口

    package note.com.bridge;
    
    /**
     * 味道接口
     * @author lxz
     *
     */
    public interface ITaste {
    
        public void buildTaste();
        
    }

    //功能2实现

    package note.com.bridge;
    
    /**
     * 甜味
     * @author lxz
     *
     */
    public class Sweet implements ITaste{
    
        public void buildTaste() {
            System.out.println("甜味");
        }
    
    }
    package note.com.bridge;
    
    /**
     * 酸味
     * @author lxz
     *
     */
    public class Sour implements ITaste{
    
        public void buildTaste() {
            System.out.println("酸味");
        }
    
    }

    //真正的功能接口

    package note.com.bridge;
    
    /**
     * 饮料基类
     * @author lxz
     *
     */
    public abstract class ADrink {
    
        private IColour colour = null;
        
        private ITaste taste = null;
        
        public ADrink(IColour colour,ITaste taste){
            this.colour = colour;
            this.taste = taste;
        }
        
        public abstract void finish();
    
        public IColour getColour() {
            return colour;
        }
    
        public void setColour(IColour colour) {
            this.colour = colour;
        }
    
        public ITaste getTaste() {
            return taste;
        }
    
        public void setTaste(ITaste taste) {
            this.taste = taste;
        }
        
        
        
    }

    //功能接口实现类

    package note.com.bridge;
    
    public class Drink extends ADrink{
    
        public Drink(IColour colour,ITaste taste) {
            super(colour,taste);
        }
        
        @Override
        public void finish() {
            System.out.println("酒:");
            getColour().buildColour();
            getTaste().buildTaste();
        }
    
    }

    //测试类

    package note.com.bridge;
    
    public class DrinkTest {
    
        public static void main(String[] args) {
            IColour blue = new Blue();
            ITaste sweet = new Sweet();
            Drink drink1 = new Drink(blue,sweet); 
            drink1.finish();
            IColour red = new Red();
            ITaste sour = new Sour();
            Drink drink2 = new Drink(red,sour); 
            drink2.finish();
        }
    }

    //结果

    酒:
    蓝色
    甜味
    酒:
    红色
    酸味

  • 相关阅读:
    网络安全之数字签名
    python爬取并分析淘宝商品信息
    循环与分支——python
    线性相关与线性无关
    linux之文件传输协议(FTP)与本地用户测试
    递归下降语法分析
    MySQL:索引
    一个基础又很重要的知识点:JDBC原理(基本案例和面试知识点)
    Tomcat的部署、虚拟主机及优化
    二叉树深度
  • 原文地址:https://www.cnblogs.com/qinggege/p/5235820.html
Copyright © 2020-2023  润新知