第三周的课学到有关面向对象的设计模式的东西。抛开课堂上讲的三种不谈,来说说常用的几种设计模式。
一、Strategy模式
1、两大原则
Strategy模式体现了如下的两大原则:
1,针对接口编程,而不是针对实现编程。
2,多用组合,少用继承。
二、Iterator模式
提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
这种设计模式非常普遍,
比如Java里面的:
public interface Iterator {
boolean hasNext();
Object next();
void remove();
}
以及C++ STL里面的 iterator使用 ++ 访问。
三、Singleton模式
下面是个C++ singleton的类:
、、、
#ifndefSINGLETON_H
#defineSINGLETON_H
#include"synobj.h"
template
classSingleton{
CLASS_UNCOPYABLE(Singleton)
public:
staticT&Instance(){//Uniquepointofaccess
if(0==_instance){
Locklock(_mutex);
if(0==_instance){
_instance=newT();
atexit(Destroy);
}
}
return*_instance;
}
protected:
Singleton(){}
~Singleton(){}
private:
staticvoidDestroy(){//Destroytheonlyinstance
if(_instance!=0){
delete_instance;
_instance=0;
}
}
staticMutex_mutex;
staticT*volatile_instance;//Theoneandonlyinstance
};
template
MutexSingleton::_mutex;
template
T*volatileSingleton::_instance=0;
#endif
、、、
四、Factory Method模式
Factory Method模式在不同的子工厂类生成具有统一界面接口的对象,一方面,可以不用关心产品对象的具体实现,简化和统一Client调用过程;另一方面,可以让整个系统具有灵活的可扩展性。
abstract class BallFactory{
protectedabstractBallmakeBall();//FactoryMethod
}
classBasketballFactextendsBallFactory{
publicBallmakeBall(){//子类实现FactoryMethod决定实例化哪一个类的
returnnewBasketball();
}
}
classFootballFactextendsBallFactory{
publicBallmakeBall(){//子类实现FactoryMethod决定实例化哪一个类的
returnnewFootball();
}
}
classBasketballextendsBall{
publicvoidplay(){
System.out.println("playthebasketball");
}
}
classFootballextendsBall{
publicvoidplay(){
System.out.println("playthefootball");
}
}
abstractclassBall{
protectedabstractvoidplay();
}
publicclasstest{
publicstaticvoidmain(String[]args){
BallFactoryballFactory=newBasketballFact();
Ballbasketball=ballFactory.makeBall();
basketball.play();
ballFactory=newFootballFact();
Ballfootball=ballFactory.makeBall();
football.play();
}
}
这是几种常用的设计模式,剩下的还有很多,毕竟有23种呢。剩下的有时间慢慢学习。
ps:没找到简书怎么写代码。看着乱糟糟的格式,真是蛋疼。