设计模式(第十式:桥梁模式)

概念:

  桥梁模式:将抽象解藕,使得这两个能独立的变化。桥梁模式也叫桥接模式。

实现:

  定义材质

    public interface Material {
        /**
         * 获取纸张
         * @return 纸张类型
         */
        String getSheet();
    }

  材质的两种实现

    public class A4 implements Material {
        @Override
        public String getSheet() {
            return "A4";
        }
    }
    public class A8 implements Material {
        @Override
        public String getSheet() {
            return "A8";
        }
    }

  定义抽象类型的书

    public abstract class AbstractBook {
        Material material;

        public AbstractBook(Material material){
            this.material = material;
        }

        public abstract void materialInfo();
    }

  抽象书的两种实现

    public class NovelBook extends AbstractBook {
        public NovelBook(Material material) {
            super(material);
        }

        @Override
        public void materialInfo() {
            System.out.println("小说都用"+material.getSheet()+"来制作。");
        }
    }
    public class ToolBook extends AbstractBook {
        public ToolBook(Material material) {
            super(material);
        }

        @Override
        public void materialInfo() {
            System.out.println("工具书都是"+material.getSheet()+"制作的");
        }
    }

 

测试与结果

  测试

    @Test
    public void bridgeTest(){
        Material material = new A4();
        AbstractBook novelBook =new NovelBook(material);
        novelBook.materialInfo();

        AbstractBook toolBook =new ToolBook(material);
        toolBook.materialInfo();

        material = new A8();
        toolBook  = new ToolBook(material);
        toolBook.materialInfo();

    }

  结果
    小说都用A4来制作。
    工具书都是A4制作的
    工具书都是A8制作的

分析:

  1.看着代码应该就很好理解,有没有一种感觉,抽象类是此岸,接口是彼岸。其实这个模式本来不常用到,有一种感觉就是给芭比娃娃换衣服,这就能有很多种搭配。但正常的逻辑一般都不需要反复来回搭配,都是一种固有的模式了。但有些还特定的场景还是能用到的。

  2.可以看得出来,桥接模式有很强的可扩展性。

  3.适用场景:
    a.如果继承层级过多,可以使用这种模式打破继续继承的模式。
    ...

   (这个平时不常用,所以就...)

posted @ 2019-04-28 10:39  Mario0315  阅读(151)  评论(0编辑  收藏  举报