zoukankan      html  css  js  c++  java
  • (十)桥接模式-代码实现

    介绍

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

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

    代码:

    //剥离功能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();
        }
    }

    //结果

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

  • 相关阅读:
    Eclipse 配置黑色主题
    [转发] win8安装mindget mindmanger
    2013.9小记
    【转发】Eclipse报错:Referenced classpath provider does not exist
    NoSql数据库初探-mongoDB读操作
    配置mongoDB服务
    NoSql数据库初探-mongoDB环境搭建
    pdf2htmlEx安装及测试
    关于ubuntu16无线网卡RTL8723BE频繁掉线及信号不足的解决办法
    一个简单的消息提示jquery插件
  • 原文地址:https://www.cnblogs.com/qinggege/p/5235820.html
Copyright © 2011-2022 走看看