设计模式学习总结三

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010773333/article/details/81285845

状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。(工作流中审批流程会用到 请假者申请请假 走oa流程)

案例二:

适配器模式:将一个类的接口转化为客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。(一般去饭店点菜都会有一个菜单这个就类似与备忘录模式)

 

组合模式:将对象组合成树型结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。(总公司-分公司)

分为 :透明方式和安全方式

透明方式:透明组合模式中,抽象构件Component中声明了所有用于管理成员对象的方法,包括add()、remove()以及getChild()等方法,这样做的好处是确保所有的构件类都有相同的接口

安全方式:不透明的使用方式,即在客户端不能全部针对抽象构件类编程,需要使用具体叶子构件类型来定义叶子对象。

安全组合模式的缺点是不够透明,因为叶子构件和容器构件具有不同的方法,且容器构件中那些用于管理成员对象的方法没有在抽象构件类中定义,因此客户端不能完全针对抽象编程,必须有区别地对待叶子构件和容器构件。在实际应用中,安全组合模式的使用频率也非常高,在Java AWT中使用的组合模式就是安全组合模式。

迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。(现在已经封装了迭代器例如foreach )

  /// <summary>
    /// 具体迭代器类
    /// </summary>
    public class ConcreteIterator:Iterator1
    {
        /// <summary>
        /// 定义了一个具体聚集对象
        /// </summary>
        private ConcreteAggregate aggregate;
        private int current = 0;

        /// <summary>
        /// 初始化时将具体的聚集对象传入
        /// </summary>
        /// <param name="aggregate"></param>
        public ConcreteIterator(ConcreteAggregate aggregate)
        {
            this.aggregate = aggregate;
        }
        /// <summary>
        /// 得到聚集的第一个对象
        /// </summary>
        /// <returns></returns>
        public override object First()
        {
            return aggregate[0];
        }

        /// <summary>
        /// 得到聚集的下一个对象
        /// </summary>
        /// <returns></returns>
        public override object Next()
        {
            object ret = null;
            current++;
            if (current < aggregate.Count)
            {
                ret = aggregate[current];
            }
            return ret;
        }
        /// <summary>
        /// 判断当前是否遍历到结尾,到结尾返回true
        /// </summary>
        /// <returns></returns>
        public override bool IsDone()
        {
            return current >= aggregate.Count ? true : false; ;
        }
        /// <summary>
        /// 返回当前的聚集对象
        /// </summary>
        /// <returns></returns>
        public override object CurrentItem()
        {
            return aggregate[current];
        }
    }

倒叙:

单例模式:保证一个类仅有一个实例,并提供一个访问她的全局访问点。

饿汉模式:自己被加载时就被初始化

赖汉模式:第一次引用时才会将自己实例化

桥接模式:将对象部分与它的现实部分分离,使它们都可以独立地变化。

命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。

案例二:

案例三:

职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。(加薪申请--申请流程和oa类似只是这里是职责 不是状态,属于谁的职责范围谁处理)

 

 

猜你喜欢

转载自blog.csdn.net/u010773333/article/details/81285845