factory:工厂模式
当使用者不需要知道对象的创建过程的时候,适合用工厂模式。
按照抽象程度又分为三种:简单工厂模式,工厂方法模式,和抽象工厂模式。
比如写一个jdbc底层,支持多数据库的。:
简单工厂模式:
public static Connection getConnection(String dbName) {
if (dbName.equals("mysql")) {
return new MysqlConnection();
}
if (dbName.equals("oracle")) {
return new OracleConnection();
}
...
}
但是呢,各个数据库的差距不仅仅在于此,比如说分页的sql也不一样。我们还需要封装一个分页的sql。就必须得用到工厂方法模式。此模式:顾名思义,工厂是工厂,方法是方法
工厂方法模式:
public Class MysqlPageHelper implements PageHelper{
public createPageSql(String sql, int startRow, int pageSize){
....
}
public Class OraclePageHelper implements PageHelper{
public createPageSql(String sql, int startRow, int pageSize){
....
}
public static void main(String[] args) {
Connection c= new MysqlConnection();
PageHelper mysqlPageHelper = c.getPageHelper();
String pageSql = mysqlPageHelper.createPageSql("I am a sql",1,10);
}
抽象工厂模式,不解释。
工厂模式的好处在于:维护性增强了。
坏处在于:每加一个类,还得改工厂代码。
spring ioc 相当于一个大的简单工厂,他利用了反射+配置文件的方法,这样就不用修改工厂类了。
singleton:单例模式
很多时候单利模式是有必要的。比如某短信收发网关,连接以后一直在运行着。
注(上面的数据库连接不能做成单例的,只能做成连接池,为什么?因为单例只有一个实例在运行,他会有漫长的等待。)
public class Test1 {
private static Test1 instance = null;
private Test1() {
}
public static Test1 getInstance() {
if (instance == null) {
instance = new Test1();
}
return instance;
}
}
prototype:原型模式
原型模式即java里面的clone方法。
很多人就迷糊了,java每个对象都有的方法,搞一个模式出来?
事实是,设计模式不光是针对java的,我们可以理解为java设计之初就加入了这个模式!
代码:略。