3. 抽象工厂模式(Abstract Factory)
3. 抽象工厂模式(Abstract Factory)
问题:需要创建一整套相关对象(比如不同风格的 UI 组件)。
核心:在工厂方法的基础上再抽象一层,一个工厂负责生产一套产品。
class LightFactory {
createButton() { return { render: () => '浅色按钮' }; }
createInput() { return { render: () => '浅色输入框' }; }
}
class DarkFactory {
createButton() { return { render: () => '深色按钮' }; }
createInput() { return { render: () => '深色输入框' }; }
}
function createUI(theme) {
const factories = { light: LightFactory, dark: DarkFactory };
return new factories[theme]();
}
const ui = createUI('dark');
console.log(ui.createButton().render()); // 深色按钮package abstractfactory
import "fmt"
type Button interface{ Render() string }
type Input interface{ Render() string }
type UIFactory interface {
CreateButton() Button
CreateInput() Input
}
// 浅色
type LightButton struct{}
func (b LightButton) Render() string { return "浅色按钮" }
type LightInput struct{}
func (i LightInput) Render() string { return "浅色输入框" }
type LightFactory struct{}
func (f LightFactory) CreateButton() Button { return LightButton{} }
func (f LightFactory) CreateInput() Input { return LightInput{} }
// 深色
type DarkButton struct{}
func (b DarkButton) Render() string { return "深色按钮" }
type DarkInput struct{}
func (i DarkInput) Render() string { return "深色输入框" }
type DarkFactory struct{}
func (f DarkFactory) CreateButton() Button { return DarkButton{} }
func (f DarkFactory) CreateInput() Input { return DarkInput{} }
func NewUIFactory(theme string) (UIFactory, error) {
switch theme {
case "light":
return LightFactory{}, nil
case "dark":
return DarkFactory{}, nil
default:
return nil, fmt.Errorf("未知主题: %s", theme)
}
}