读书笔记:
New 具体类实例即为针对实现编程,因为因此而在代码中具体化了一个类,将来会有可能带来修改,而如果针对接口编程,即在代码中用抽象类代替具体类,则不易于引起修改。
简单工厂:
严格来说不是设计模式,只是编程良好规范,将易于变化的部分抽取出来封装。
工厂方法:
定义了创建对象的框架,实际创建工作由具体的子类完成。子类不同创建的实例类型也不同。用于创建一个对象。通过继承完成解耦。
抽象工厂:
创建一系列的对象;将创建过程与客户程序解耦,工厂子类负责一组对象的创建;工厂抽象类中定义了多个工厂方法;多个工厂子类可供客户程序根据自己的需要作选择;通过组合实现解耦。
抽象工厂中每一种对象的创建都是用了工厂方法模式,即实际对象的创建延迟到抽象工厂子类中做具体对象创建。
抽象工厂的缺点:
当被创建的对象家族中有新的成员类时,抽象工厂模式的程序面临全部修改。
依赖倒置:不依赖于具体类型,而依赖于抽象类型,也即依赖于接口。
23/04/2018 12:33 AM
工厂方法 着眼于 对象如何创建。
抽象工厂 着眼于 一组对象的创建过程。
比如用抽象工厂模式创建 UI的各个组成部分:字体 工具栏 边角 颜色。。
concreteFactoryA 实现了 加粗字体 全集工具栏 圆形边角 红色风格
客户端程序调用concreteFactoryA就能得到这个组合样式。
工厂方法是工厂模式的一个维度。将创建延迟到子类。
2024/6/17 11:25
简单工厂:就是用同一个工厂类,根据要求(if-else)生产不同的实例
抽象工厂:用具体的工厂类 去生产 具体的实例。
工厂方法:看上去,和抽象工厂没有本质的差别,只是创建 单个具体实例。。
package main
import "log"
type AbstractFactory interface {
CreateA()
CreateB()
}
type Factory1 struct{}
type Factory2 struct{}
func (f *Factory1) CreateA() {
log.Println("A1")
}
func (f *Factory1) CreateB() {
log.Println("B1")
}
func (f *Factory2) CreateA() {
log.Println("A2")
}
func (f *Factory2) CreateB() {
log.Println("B2")
}
var (
// check type struct implemented all interface's methods.
_ AbstractFactory = (*Factory1)(nil)
)
/**
* 简单工厂:就是用同一个工厂类,根据要求(if-else)生产不同的实例。
* 抽象工厂:抽象工厂定义框架,用具体的工厂类 去生产 具体的实例。
* 工厂方法:和抽象工厂没有本质的差别,只是,具体工厂仅用于创建单个具体实例。
*/
func main() {
var f AbstractFactory
f = &Factory1{}
f.CreateA()
f.CreateB()
f = &Factory2{}
f.CreateA()
f.CreateB()
}
标签:OO,创建,工厂,实例,抽象,子类,具体,设计模式
From: https://www.cnblogs.com/zongzw/p/18252147