23种设计模式

	单例(懒汉、饿汉)。
	
	简单工厂(封装一个工厂类负责创建实例对象,传不同的值创建不同的对象,比如传草莓创建草莓冰淇淋,传核桃创建核桃冰淇淋)。

	工厂方法(简单工厂的工厂也分伦敦工厂和东京工厂,也是继承了一个工厂基类)。

	抽象工厂(工厂方法中一个工厂只能生产一种产品(如冰淇淋),若现在还想能生产水,工厂类还需要有个createwater的接口)。

	生成器模式:有个对象需建立,但是它有多个组件,比如电脑有主机和鼠标,就需要一个builder类,
	定义了对象的各个组件的创建方法和返回相应对象的方法,Director类对组件进行组装并生成产品,
	里面包含了Builder类和一个大方法(它调用了builder的多个生产组件的方法)。

	原型模式:就是复制,分为深浅拷贝,在java中就是重写clone方法。

	适配器模式:说白了就是把一个类的接口封装成另外一个类的接口,免得接口不匹配。

	装饰者模式:装饰类和被装饰类都继承自一个父类,如饮品和调料都继承自商品,都有获得价格、获得商品信息等属性,牛奶继承可饮品,糖可基础调料,且糖这个类里面有一个成员变量是牛奶。

	代理模式:比如我要买房,代理类里面有个房子的成员变量,代理类和这个房子类都实现了一个接口,里面都有买房这个成员函数,代理类对象的买房不但会调用房子类的买房,还会做一些其他的事情,比如交税等杂事。 智能指针就是这种。 

	外观模式:隐藏内部复杂的细节,如电脑有cpu和内存,电脑开关机时,相应部件也要开关,CPU类有开机和关机的接口,内存也是,电脑也是,但是电脑内部包含了CPU和内存的成员变量,电脑的开机调用了CPU和内存的开机。

	桥接模式:比如两个类 手机品牌 和 手机软件 ,让所有软件实现软件类的run方法,手机这个类里面有软件的成员变量,有run方法,然后不同品牌手机的run其实是调用软件这个成员变量的run。分离手机品牌和手机软件,解耦。

	组合模式:组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象, 如一个component类(成员函数有add(component),remove(component),getchild(i),遍历等),被树叶类和树枝类(里面有个成员变量是树叶类的集合)都继承。

	享元模式:一个工厂有一个map,创建对象时如果有对应的key就返回已有对象,否则新创建个并加入map再返回。将内部状态和外部状态相分离,比如按某个属性获得对象,再对该对象的其他属性进行一些设置。 

	策略模式:一个策略类有加法的接口,不同策略的类继承它但加法的实现不一样,有个类有一个策略类的成员变量,它的计算接口调用该成员变量的加法接口。

	模板模式:一个做菜类,里面有准备、做、装盘三个方法,还有做菜方法(它调用这三个方法),子类继承它,实现具体的三个方法。

	观察者模式:被观察者类有三个接口 加入观察者、删除观察者、通知观察者(会调用所有观察者的update方法),有个成员变量是观察者的集合,一个成员变量是string信息,观察者类有一个接口是更新信息update(设置新的string并打印出来)。

	迭代器模式:一个类有hasnext和next接口,其他具体迭代器类实现它,具体的迭代器内有其对应的集合,有cursor,而对应的集合类有 add、remove、返回对应迭代器的接口。 

	责任链模式:一个抽象的决策者类有成员变量决策者,还有成员函数处理请求和设置决策者,具体的决策者是继承这个类。在处理请求函数中根据请求的特点来自己处理还是调用其成员变量(也是个决策者)的处理请求函数。  

	命令模式:一个命令抽象类有 do 和 undo 两个接口,具体类继承它,同时有一个成员变量light,do调用light.off ,undo调用light.on,请求者这个类有两个接口do和undo,分别调用命令类的do和undo (但是命令类不是它的成员变量,是在调用时传入的)。

	状态模式:一个状态类,有do_action接口,一个startstate状态类继承它,do_action(Context context)调用(context.setstate(stopstate))和 to_string接口,一个stopstate状态类也一样context.setstate(startstate),context 这个类里面有个state成员变量和设置、获取state的接口。 

	备忘录模式:有个备忘录类有成员变量string state,有设置和获取它的接口,有个类有state成员变量,获取和设置它的接口,有savetomemento方法(创建一个备忘录类)和从备忘录类获取state的方法,有个类有个成员变量是备忘录类的集合,有add(memento)方法 和 get(index)方法。

	访问者模式:访问者类visitor,有接口visit(element),调用element的getA,getB接口,element类有个接口accept(visitor),会调用传入的visitor的visit(this),有个数据结构类有element集合,有添加、删除、获取element的接口,有accept(visitor)接口,会调用所有element.accept(visitor)。

	中介者模式:有一个客户类,有中介者类的成员变量,receive方法和send方法(调用中介者的relay方法)和设置中介者的方法,有个中介者类有注册客户,转发(relay)到客户(根据传入的客户从集合找到它并调用它的receive)的方法,有客户的集合这个成员变量。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成长是自己的事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值