目录
一、OOP七大原则
二、工厂模式
遵循OOP的以下原则:
核心本质:
三种模式:
小结:
应用场景:
三、抽象工厂模式
定义:
适用场景:
优点:
缺点:
一、OOP七大原则
一、开-闭原则(Open-Closed Principle, OCP)
对扩展开放,对修改关闭。最基础,最重要的一个原则。顾名思义,对一个类允许扩展其功能,但是不能影响到现有的功能模块。对提供方开放,对使用方关闭。
二、里氏替换原则(Liskov Substitution Principle,LSP)
继承必须确保超类所拥有的性质在子类中仍然成立。超类能出现的地方,可以用子类代替,子类拥有超类的所有属性和方法,通俗来说子类拥有超类的功能,可以拓展超类的功能,但是不能修改超类的功能。
三、依赖倒置原则(Dependence Inversion Principle)
要面向接口编程,不要面向实现编程。高层模块不应该依赖底层模块,二者都依赖其抽象。程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
四、接口隔离原则(Interface Segregation Principle, ISP)
要为各个类建立它们需要的专用接口。不同的类使用同一个接口的部分方法时,应该将每个类对应的方法从接口中抽离出来分别实现。
五、合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)
尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。判断组合和聚合关系的一个简单方法就是:看整体与部分的生命周期是否一致,部分能够独立于整体而存在则属于聚合;整体消失部分不复存在则属于组合。
六、迪米特法则(Law of Demeter LoD)
也叫最少知道原则。只与你的直接朋友交谈,不跟“陌生人”说话。两个对象之间有耦合关系,说明对象间是朋友关系。出现在成员变量,方法参数,方法返回值中的类为直接朋友;出现在局部变量中的类就是陌生朋友。
七、单一职责原则(Simple responsibility pinciple SRP)
控制类的粒度大小,将对象解耦、提高其内聚性。一个类做好自己的事情,尽量不要与其他类建立联系。一个类中的方法只做一件事情。
二、工厂模式
遵循OOP原则:
开闭原则:软件的试题应实体扩展开放,对修改关闭。
依赖倒置原则:针对接口编程,不针对实现编程
迪米特法则:只与直接的朋友通信,避免与陌生人通信。
核心本质:
实例化对象不使用new,用工厂方法代替
将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
三种模式:
简单工厂模式
用来生产同一等级结构中的任意产品(对于增加新的产品,需要覆盖已有代码)
工厂方法模式
用来生产同一等级结构中的固定产品(支持增加任意产品)
抽象工厂模式
围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
小结:
简单工厂模式(静态工厂模式)
虽然某种程度上不符合设计原则,但实际使用最多!
工厂方法模式
不修改已有类的前提下,通过增加新的工厂类实现扩展。
抽象工厂模式
不可以增加产品,可以增加产品族!
应用场景:
JDK中Calendar的getInstance方法
JDBC中的Connection对象的获取
e Spring中IOC容器创建管理bean对象
反射中Class对象的newInstance方法
三、抽象工厂模式
只提供标准不生产实体
定义:
抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定它们具体的类
适用场景:
客户端(应用层)不依赖于产品类实例如何被创建、实现等细节
强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量的重复代码
提供一个产品类的库,所有的产品以同样的接口出现,从而使得客户端不依赖于具体的实现
优点:
适用于产品族比较稳定的情况,具体产品在应用层的代码隔离,无需关心创建的细节
将一个系列的产品统一到一起创建
缺点:
规定了所有可能被创建的产品集合,产品 中扩展新的产品困难;
增加了系统的抽象性和理解难度(增加一个产品有一定的难度)
抽象工厂模式
围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。



