设计模式
概念:
每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样你就能一次又一次地使用该方案而不必做重复劳动
基础知识点:
设计模式四个基本要素:模式名称,问题,解决方案,效果
接口:一种特殊的类,声明了若干方法,要求继承该接口的类必须实现这些方法。
作用:限制继承接口的类的方法的名称及调用方式;隐藏了类的内部实现。接口就是一种抽象的基类(父类),限制继承它的类必须实现接口中定义的某些方法
设计模式6大原则:
开闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
里氏(Liskov)替换原则:所有引用基类(父类)的地方必须能透明地使用其子类的对象。
依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。换言之,要针对接口编程,而不是针对实现编程。
接口隔离原则:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。
迪米特法则:一个软件实体应当尽可能少地与其他实体发生相互作用。
单一职责原则:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。
常见设计模式:
工厂模式:不直接向客户端暴露创建的实现细节,而是通过一个工厂类来负责创建产品类的实例
优点:隐藏了对象创建的实现细节;客户端不需要修改代码
缺点:违反了单一职责,将创建逻辑集中到一个类中;当添加新产品时需要修改工厂类代码,违反了开闭原则
单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点
使用场景:当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
优点:对唯一实例的受控访问;单例相当于全局变量,但防止了命名空间被污染
与单例模式功能相似的概念:全局变量、静态变量(方法)
代理模式:为其他对象提供一种代理以控制对这个对象的访问
使用场景:为远程对象提供代理
优点:隐藏对象位于远程地址空间的事实