设计模式之行为型(6)

2023-09-11  本文已影响0人  宏势

行为型模式,共十一种,常用行为类模式: 1.策略模式 2.责任链模式 3.观察者模式 4.模板模式 5.迭代器模式 6.状态模式

一、策略模式

1.一句话描述

2.类图

image.png

3.实战案例

4.总结

1.分离需求中变化的部分,抽象成策略接口,可以独立扩展,吻合开闭原则
2.采用组合的方式代替继承,易于扩展

二、责任链模式

1.一句话描述

2.类图

image.png

3.实战案例

4.总结

1.责任链可以将请求的发送者和接受者解耦
2.链条实现方式可以是链表也可以是列表或者数组集合

三、观察者模式

1.一句话描述

2.类图

image.png

3.实战案例

四、模板模式

1. 一句话描述

2.类图

image.png

3.实战案例

Spring框架中,模板方法模式常用于实现通用的业务逻辑和流程,以便让开发人员专注于特定的实现细节

4.总结

1.常用于实现标准或者通用业务逻辑流程,具体特定步骤和细节由具体子类来实现
2.支持使用钩子函数,让父类控制何时以及如何让子类参与,子类不直接调用父类

五、迭代器模式

1.一句话描述

2.类图/源码

image.png
    private class Itr implements Iterator<E> {
        /**
         * Index of element to be returned by subsequent call to next.
         */
        int cursor = 0;

        /**
         * Index of element returned by most recent call to next or
         * previous.  Reset to -1 if this element is deleted by a call
         * to remove.
         */
        int lastRet = -1;

        /**
         * The modCount value that the iterator believes that the backing
         * List should have.  If this expectation is violated, the iterator
         * has detected concurrent modification.
         */
        int expectedModCount = modCount;

        public boolean hasNext() {
            return cursor != size();
        }

        public E next() {
            checkForComodification();
            try {
                int i = cursor;
                E next = get(i);
                lastRet = i;
                cursor = i + 1;
                return next;
            } catch (IndexOutOfBoundsException e) {
                checkForComodification();
                throw new NoSuchElementException();
            }
        }

        public void remove() {
            if (lastRet < 0)
                throw new IllegalStateException();
            checkForComodification();

            try {
                AbstractList.this.remove(lastRet);
                if (lastRet < cursor)
                    cursor--;
                lastRet = -1;
                expectedModCount = modCount;
            } catch (IndexOutOfBoundsException e) {
                throw new ConcurrentModificationException();
            }
        }

        final void checkForComodification() {
            if (modCount != expectedModCount)
                throw new ConcurrentModificationException();
        }
    }

3.实战案例

六、状态模式

1.一句话描述

2.类图

image.png

3.实战案例

有人说策略模式和状态模式是双胞胎,非常像

1.状态和策略模式都是解决多if-else的问题常用方式
2.状态模式的状态类往往会持有Context引用,达到切换Context 内部状态的目的
3.状态模式关注的重点的状态轮转, 而且策略模式关注是不同执行算法

上一篇 下一篇

猜你喜欢

热点阅读