• 《大话设计模式》读书笔记(七)


    写在前面

    本文上接《大话设计模式》读书笔记(六),这次来学习单例模式、桥接模式、命令模式。

    14.单例模式(Singleton Pattern)

    解决的问题

    单例模式可以创建一个类的全局唯一的实例,使得资源得到节约。

    类图结构

    image-20201228221905595

    这个类图很简单,只有一个Singleton类:

    class Singleton{
        private static Singleton instance;
        
        private Singleton(){
            
        }
        public static Singleton GetInstance(){
            if(instance == null){
                instance = new Singleton();
            }
            return instance;
        }
    }
    

    好处与坏处

    单例模式的好处十分明显,单例模式可以严格的控制唯一实例的受控访问。但缺点在于不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。

    15.桥接模式(Bridge Pattern)

    解决的问题

    可以把抽象和实现分离,桥接模式解决的是类属性多维度变化问题,把类的抽象层次结构和类的实现层级结构解耦。

    类图结构

    image-20201228223033481

    这个类图看着还是比较复杂的,首先是一个Abstraction类,代表抽象,Implementor代表实现类,RefinedAbstraction代表被提炼的抽象,ConcreteImplementorA和B代表两个具体的实现。

    Implementor类:

    abstract class Implementor{
        public abstract void Operation()
    }
    

    ConcreteImplementorA 和 ConcreteImplementorB类:

    class ConcreateImplementorA : Implementor{
        public override void Operation(){
            Console.WriteLine("具体实现A的方法执行");
        }
    }
    class ConcreateImplementorB : Implementor{
        public override void Operation(){
            Console.WriteLine("具体实现B的方法执行");
        }
    }
    

    Abstract类:

    class Abstraction{
        protected Implementor implementor;
        public void SetImplementor(Implementor implementor){
            this.implementor = implementor;
        }
        public virtual void Operation(){
            implementor.Operation();
        }
    }
    

    RefinedAbstraction类:

    class RefinedAbstraction : Abstraction{
        public override void Operation(){
            implementor.Operation();
        }
    }
    

    好处与坏处

    桥接模式的好处,就在于能够把这种多维度的变化分离出来独立变化,减少他们的耦合。但缺点是会使得系统变得很复杂,更加难以维护。

    16.命令模式(Command Pattern)

    解决的问题

    命令模式,将一个请求封装成一个对象,可以降低耦合度,更加容易扩展。适用于发起的命令比较复杂的情况。

    类图结构

    image-20201228224918207

    好处与坏处

    • 降低耦合度.

    • 新增一个命令/一组命令简单.

    • 调用同一方法实现不同功能.

      坏处:

      会产生过多具体命令类.

    总结

    这次学习了三个模式

  • 相关阅读:
    需求分析与原型设计
    调研《构建之法》指导下的全国高校的历届软工实践作品
    对实践项目完成后学习到的能力的预期
    NOIP2020赛前调整
    CSP-S2020赛前心态调整
    CSP-S2019认证
    如何在数据库中存储IP地址
    jmeter手写脚本,使用正则获取cookie(禁用cookies管理器)
    LoadRunner如何监控Linux下的系统资源
    LR回放https协议脚本失败:[GENERAL_MSG_CAT_SSL_ERROR]connect to host "XXX" failed:[10054] Connection reset by peer [MsgId:MERR-27780]
  • 原文地址:https://www.cnblogs.com/wushenjiang/p/14204176.html
Copyright © 2020-2023  润新知