zoukankan      html  css  js  c++  java
  • Java设计模式二十一:桥模式(Bridge Pattern)

    桥模式就是把抽象部分和它的实现部分分离开来,让两者可独立变化。这里的抽象部分指的是一个概念层次上的东西,它的实现部分指的是实现这个东西的(功能)部分,分离就把实现部分从它要实现的抽象部分独立出来,自我封装成对象。

    类图:


    组成:
    抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。
    修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。
    实现化(Implementor)角色:这个角色给出实现化角色的接口,但不给出具体的实现。必须指出的是,这个接口不一定和抽象化角色的接口定义相同,实际上,这两个接口可以非常不一样。
    具体实现化(Concrete Implementor)角色:这个角色给出实现接口的具体实现。

    实例:动物行为的例子,我们把行为从动物类中抽离出来,形成行为类,在动物类中引用这个行为对象,这样动物的行为可以独立变化。
    public abstract class MovementImplementor
    {
        public abstract void move();
    }

    public class FlyConcreteImplementor extends MovementImplementor
    {
        @Override
        public void move()
        {
            System.out.println(" Fly!!! ");
        }
    }

    public class JumpConcreteImplement extends MovementImplementor
    {
        @Override
        public void move()
        {
            System.out.println(" jump!!!");
        }
    }

    public class Abstraction
    {
        protected final MovementImplementor implementor;

        public Abstraction(final MovementImplementor implementor)
        {
            this.implementor = implementor;
        }

        public void move()
        {
            this.implementor.move();
        }
    }

    public class ChickRefinedAbstraction extends Abstraction
    {
        public ChickRefinedAbstraction(final MovementImplementor implementor)
        {
            super(implementor);
        }

        @Override
        public void move()
        {
            System.out.print("chicks");
            super.move();
        }
    }

    public class DogRefinedAbstraction extends Abstraction
    {
        public DogRefinedAbstraction(final MovementImplementor implementor)
        {
            super(implementor);
        }

        @Override
        public void move()
        {
            System.out.print("dogs");
            super.move();
        }
    }

    public class Client
    {
        public static void main(final String[] args)
        {
            final MovementImplementor fly = new FlyConcreteImplementor();
            final MovementImplementor jump = new JumpConcreteImplement();

            final Abstraction chick = new ChickRefinedAbstraction(fly);
            final Abstraction dog = new DogRefinedAbstraction(jump);

            chick.move();
            dog.move();
        }
    }

    结果:
    chicks Fly!!!
    dogs jump!!!

  • 相关阅读:
    数据结构与算法复习(三)归并排序
    编程练习-扑克牌
    编程练习-字符串处理及简单排序
    spi驱动框架学习记录
    mt7628网口引脚设置成通用GPIO的方法
    数据结构与算法复习(二)插入排序
    数据结构与算法复习(一)快速排序
    基于input子系统的按键驱动程序
    基于设备树编写按键中断驱动程序
    Linux读写权限整理 --chmod
  • 原文地址:https://www.cnblogs.com/itTeacher/p/2822952.html
Copyright © 2011-2022 走看看