• linkin大话设计模式--桥接模式


    linkin大话设计模式--桥接模式


    桥接模式是一种结构化模式,他主要应对的是:由于实际的需要,某个类具有2个或者2个以上维度的变化,如果只是使用继承将无法实现功能,或者会使得设计变得相当的臃肿。我们为了不一直忙于定义子类,就可以使用桥接模式。桥接模式就是把变化部分抽象出来,使变化部分与主类部分分离开来,从而将多个维度的变化彻底分离。最后提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。

    代码如下:
    <span style="font-size:14px;">//这里继承一个抽象类   其中的维度就是不同的面条
    public class PorxyNoodle1 extends AbstractNoode{
        
        public PorxyNoodle1(Peppery style) {
            super(style);
        }
    
        @Override
        public void eat() {
            System.out.println("这里是第1种面条..."+super.style.style());
        }
    
        
        public static void main(String[] args) {
            AbstractNoode noodel1 = new PorxyNoodle1(new PepperyStyle1());
            noodel1.eat();
            AbstractNoode noodel2 = new PorxyNoodle1(new PepperyStyle2());
            noodel2.eat();
            AbstractNoode noodel3 = new PorxyNoodle2(new PepperyStyle1());
            noodel3.eat();
            AbstractNoode noodel4 = new PorxyNoodle2(new PepperyStyle2());
            noodel4.eat();
        }
    }
    
    // 继承了实现了一个维度上面的变化的一个抽象类 这样子具体的另外一个维度上面的实现就是这里不同的类名里面不同的逻辑
    class PorxyNoodle2 extends AbstractNoode{
    
        public PorxyNoodle2(Peppery style) {
            super(style);
        }
    
        @Override
        public void eat() {
            System.out.println("这里是第2种面条..."+super.style.style());
        }
    
    }
    
    //其中的一个维度上的接口(辣椒味道)  只要是这个维度里面有变化 直接修改或者添加具体的实现类就可以
    interface Peppery{
        public String style();
    }
    
    class PepperyStyle1 implements Peppery{
    
        @Override
        public String style() {
            return "这里是辣椒风格1...";
        }
        
    }
    
    class PepperyStyle2 implements Peppery{
    
        @Override
        public String style() {
            return "这里是辣椒风格2...";
        }
        
    }
    
    abstract class AbstractNoode{
        //这里的这个抽象类里面这个属性其实就是一个维度   一会在new对象的时候这个属性会作为一个参数传入构造器 除了new时根据不同的类型外又实现了一个维度上的独立
        public Peppery style;
    
        public AbstractNoode(Peppery style) {
            this.style = style;
        }
        
        public abstract void eat();
            
    }
    </span>



































  • 相关阅读:
    类的定义
    面向对象与面向过程介绍
    跨目录导入模块
    正则表达式re模块
    常用工具包(模块)
    生成器generator
    闭包
    命名空间name space
    函数的递归
    POJ1062
  • 原文地址:https://www.cnblogs.com/LinkinPark/p/5233186.html
Copyright © 2020-2023  润新知