DesignPatterns

package module
v0.0.0-...-6a17efd Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 29, 2019 License: MIT Imports: 1 Imported by: 0

README

设计模式——golang实现

生活的理想,就是为了理想的生活。 ——张闻天

本项目实现了一共23种设计模式和一个农场模拟需求变更时使用的5个综合的设计模式的小项目

本项目包括

创造型模式

  1. 单例模式

  2. 原型模式

  3. 简单工厂

  4. 抽象工厂

  5. 建造者模式

结构型模式

  1. 享元模式

  2. 代理模式

  3. 修饰器模式

  4. 外观模式

  5. 桥接模式

  6. 组合模式

  7. 过滤模式

  8. 适配器模式

行为型模式

  1. 中介者模式

  2. 命令模式

  3. 备忘录模式

  4. 模板方法模式

  5. 状态模式

  6. 策略模式

  7. 观察者模式

  8. 解释器模式

  9. 责任链模式

  10. 迭代器模式

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AbsDuckFactory

type AbsDuckFactory interface {
	CreateMallardDuck() QuackAble
	CreateRedheadDuck() QuackAble
	CreateDuckCall() QuackAble
	CreateRubber() QuackAble
}

第三次需求变更为了防止调用者忘了建立叫声统计类 我们这里使用抽象工厂,开闭原则中对扩展是开放的,所以我们将抽象工厂也扩展到修饰器中

type Creak

type Creak interface {
	Creak()
	QuackObservable
}

第一次需求变动,现在农场多了一些鹅,鹅也想quack()但是鹅只有creak() 采用适配器模式 适配模式

type DuckCall

type DuckCall struct {
	// contains filtered or unexported fields
}

func (*DuckCall) NotifyObservers

func (d *DuckCall) NotifyObservers()

func (*DuckCall) RegisterObserver

func (d *DuckCall) RegisterObserver(observer Observer)

func (*DuckCall) RemoveObserver

func (d *DuckCall) RemoveObserver(observer Observer)

type DuckDoctor

type DuckDoctor struct {
}

具体的订阅接收者

func (DuckDoctor) Update

func (d DuckDoctor) Update(observable QuackObservable)

type DuckFactory

type DuckFactory struct {
}

鸭子工厂

func (*DuckFactory) CreateDuckCall

func (q *DuckFactory) CreateDuckCall() QuackAble

func (*DuckFactory) CreateMallardDuck

func (q *DuckFactory) CreateMallardDuck() QuackAble

func (*DuckFactory) CreateRedheadDuck

func (q *DuckFactory) CreateRedheadDuck() QuackAble

func (*DuckFactory) CreateRubber

func (q *DuckFactory) CreateRubber() QuackAble

type Flock

type Flock struct {
	// contains filtered or unexported fields
}

func (*Flock) Add

func (f *Flock) Add(q QuackAble)

func (*Flock) NotifyObservers

func (f *Flock) NotifyObservers()

func (*Flock) RegisterObserver

func (f *Flock) RegisterObserver(observer Observer)

func (*Flock) Remove

func (f *Flock) Remove(q QuackAble)

func (*Flock) RemoveObserver

func (f *Flock) RemoveObserver(observer Observer)

type FlockDuck

type FlockDuck interface {
	Add(q QuackAble)
	Remove(q QuackAble)
}

第四次需求变更,我们需要管理那些鸭子和鹅 这时候使用组合模式 组合模式接口

type Goose

type Goose struct {
	// contains filtered or unexported fields
}

被适配的类

func (*Goose) Creak

func (g *Goose) Creak()

func (*Goose) NotifyObservers

func (g *Goose) NotifyObservers()

func (*Goose) RegisterObserver

func (g *Goose) RegisterObserver(observer Observer)

func (*Goose) RemoveObserver

func (g *Goose) RemoveObserver(observer Observer)

type GooseAdapter

type GooseAdapter struct {
	Creak
}

type MallardDuck

type MallardDuck struct {
	// contains filtered or unexported fields
}

func (*MallardDuck) NotifyObservers

func (m *MallardDuck) NotifyObservers()

func (*MallardDuck) RegisterObserver

func (m *MallardDuck) RegisterObserver(observer Observer)

func (*MallardDuck) RemoveObserver

func (m *MallardDuck) RemoveObserver(observer Observer)

type ObservableAssist

type ObservableAssist struct {
	// contains filtered or unexported fields
}

具体的发布者

func (*ObservableAssist) NotifyObservers

func (o *ObservableAssist) NotifyObservers()

func (*ObservableAssist) RegisterObserver

func (o *ObservableAssist) RegisterObserver(observer Observer)

func (*ObservableAssist) RemoveObserver

func (o *ObservableAssist) RemoveObserver(observer Observer)

type Observer

type Observer interface {
	Update(observable QuackObservable)
}

第五次需求变更,我们想要做一个提醒,当任何一个鸭子或鹅叫的时候 毫无疑问,这时候应该采取观察者模式 订阅接收者接口

type QuackAble

type QuackAble interface {
	QuackObservable
	// contains filtered or unexported methods
}

type QuackCounter

type QuackCounter struct {
	// contains filtered or unexported fields
}

第二次变动,统计叫声 采用修饰器模式

func (*QuackCounter) NotifyObservers

func (q *QuackCounter) NotifyObservers()

func (*QuackCounter) RegisterObserver

func (q *QuackCounter) RegisterObserver(observer Observer)

func (*QuackCounter) RemoveObserver

func (q *QuackCounter) RemoveObserver(observer Observer)

type QuackObservable

type QuackObservable interface {
	RegisterObserver(observer Observer)
	RemoveObserver(observer Observer)
	NotifyObservers()
}

订阅发布者接口

type RedheadDuck

type RedheadDuck struct {
	// contains filtered or unexported fields
}

func (*RedheadDuck) NotifyObservers

func (r *RedheadDuck) NotifyObservers()

func (*RedheadDuck) RegisterObserver

func (r *RedheadDuck) RegisterObserver(observer Observer)

func (*RedheadDuck) RemoveObserver

func (r *RedheadDuck) RemoveObserver(observer Observer)

type RubberDuck

type RubberDuck struct {
	// contains filtered or unexported fields
}

func (*RubberDuck) NotifyObservers

func (r *RubberDuck) NotifyObservers()

func (*RubberDuck) RegisterObserver

func (r *RubberDuck) RegisterObserver(observer Observer)

func (*RubberDuck) RemoveObserver

func (r *RubberDuck) RemoveObserver(observer Observer)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL