第六章:面向软件构造的可复用性的构建方法
第二节:设计可维护模式
问题一:可维护模式的分类
- 构建模式(Creational patterns)
- 结构模式(Structural patterns)
- 行为模式(Behavioral patterns)
问题二:构建模式(Creational patterns)
1.工厂模式方法(Factory Method pattern)
方法:定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。
用途:当client不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。
理解:说到工厂方法,其实本质就是尽量避免Client使用SomeObject object = new SomeObject()这种可以直接使用new构建对象的方法。转而提供一些工厂类来避免暴露我的具体的类名。举个例子来说明,有一家餐馆,卖各种调料酱,这家店的老板告诉他的顾客,这些调料酱有沙拉酱,烧烤酱和番茄酱等等,但怎么要看顾客的使用就行;还有一家餐馆,老板不想让顾客知道我用的什么酱,我只告诉你你可以用调料酱。
上面两个例子,前面那个餐馆就可以视为没有工厂,直接用new来“使用酱”;后边的餐馆,就有一个工厂屏蔽了顾客和餐馆,只有餐馆的人知道我给你的啥酱。(转自https://blog.csdn.net/qq_37487121/article/details/79985899)
模式图:
*例:非静态的工厂方法:
静态的工厂方法:
优点:
– Eliminates the need to bind application-specific classes to your code.
– Code deals only with the Product interface (Trace), so it can work withany user-defined ConcreteProduct (FileTrace, SystemTrace)
潜在的缺点:
– Clients may have to make a subclass of the Creator, just so they cancreate a certain ConcreteProduct.
– This would be acceptable if the client has to subclass the Creator anyway,but if not then the client has to deal with another point of evolution.
满足:OCP(Open-Closed Principle):—对扩展的开放,对修改已有代码的封闭
2.抽象工厂模式(Abstract Factory)
方法:提供接口以创建一组相关/相互依赖的对象,但不需要指明其具体类。
用途:例:①当一个UI,包含多个窗口控件,这些控件在不同的OS中实现不同。②当一个仓库类,要控制多个设备,这些设备的制造商各有不同,控制接口有差异