论坛首页 Java企业应用论坛

由JDBC数据库连接所联想到的5种设计模式

浏览 14368 次
精华帖 (0) :: 良好帖 (6) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-05-31  
赞赏楼主的动手精神
0 请登录后投票
   发表时间:2010-05-31  
mrvito 写道
迪米特法则(LCP)
迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD.

谢谢,写的比较急,幸好你指出来了,免得误人子弟.
0 请登录后投票
   发表时间:2010-05-31  
robin_hood 写道
我也觉得第一个模式怎么跟工厂有点像呢?

    既然有人认为第一个模式是工厂模式,我理解自己写的没错,就是策略模式。当然,也可以通过工厂来实现。
下面贴出这两个模式的实现代码。如果有误,大家可以一起讨论。

    策略模式实现,简单起见,我就将自己的测试代码和应用环境写在一起。
public class ClientContext {
	Strategy strategy;
	
	public ClientContext(Strategy strategy){
		
		this.strategy=strategy;
	}
	
	public void getConnDB(){
		strategy.getConnDB();
	}
	
	public static void main(String[] args) {
		/**
		 * 策略模式实现对Oracle的连接操作.
		 */
		ClientContext occ = new ClientContext(new OracleStrategy());
		occ.getConnDB();
		/**
		 * 策略模式实现对Mysql的连接操作.
		 */
		ClientContext mcc = new ClientContext(new MysqlStrategy());
		mcc.getConnDB();
		/**
		 * 策略模式实现对SQL Server的连接操作.
		 */
		ClientContext scc = new ClientContext(new SQLStrategy());
		scc.getConnDB();

	}

}

     简单工厂模式实现:
public class Factory {
	
	private  static Strategy strategy; 
	
	public Factory(){
		
	}
	
	public static Strategy getStrategy(){
		
		return strategy;
		
	}
	public void setStrategy(Strategy  strategy){
		this.strategy=strategy;
	}
	
	public static Strategy creat(String dbName){
		 if(dbName=="Oracle"){
	 			strategy=new OracleStrategy();
	 		}else if(dbName=="Mysql") {
	 			strategy =new MysqlStrategy();
	 		}else if (dbName=="SQL Server") {
	 			strategy=new SQLStrategy();
	 		}
		 return strategy;
	}
	
	/**
	 * 简单工厂模式实现对数据库的连接操作.
	 */
     public static void main(String[] args) {
    	 
    	 Factory.creat("Oracle").getConnDB();
    	 Factory.creat("Mysql").getConnDB();
    	 Factory.creat("SQL Server").getConnDB();
	}

}

    简单讲,策略模式是行为型模式,强调对算法的封装;而工厂模式是创建型模式,强调对象的创建。具体自己去体会。
     至于桥接模式,它的确和策略模式很像。很多资料也那数据库连接操作DAO模式来讲述桥接模式.但我认为一些xxxDAOImpl都属于策略模式范畴(可能太咬文嚼字了吧),他们之间具体的差别,以后在表。
     其实,不管是什么模式,理解其核心思想比如,面向接口编程,高内聚低耦合等思想都是万变不离其宗的.
0 请登录后投票
   发表时间:2011-05-07  
wenqxin 写道
robin_hood 写道
我也觉得第一个模式怎么跟工厂有点像呢?

    既然有人认为第一个模式是工厂模式,我理解自己写的没错,就是策略模式。当然,也可以通过工厂来实现。
下面贴出这两个模式的实现代码。如果有误,大家可以一起讨论。

    策略模式实现,简单起见,我就将自己的测试代码和应用环境写在一起。
public class ClientContext {
	Strategy strategy;
	
	public ClientContext(Strategy strategy){
		
		this.strategy=strategy;
	}
	
	public void getConnDB(){
		strategy.getConnDB();
	}
	
	public static void main(String[] args) {
		/**
		 * 策略模式实现对Oracle的连接操作.
		 */
		ClientContext occ = new ClientContext(new OracleStrategy());
		occ.getConnDB();
		/**
		 * 策略模式实现对Mysql的连接操作.
		 */
		ClientContext mcc = new ClientContext(new MysqlStrategy());
		mcc.getConnDB();
		/**
		 * 策略模式实现对SQL Server的连接操作.
		 */
		ClientContext scc = new ClientContext(new SQLStrategy());
		scc.getConnDB();

	}

}

     简单工厂模式实现:
public class Factory {
	
	private  static Strategy strategy; 
	
	public Factory(){
		
	}
	
	public static Strategy getStrategy(){
		
		return strategy;
		
	}
	public void setStrategy(Strategy  strategy){
		this.strategy=strategy;
	}
	
	public static Strategy creat(String dbName){
		 if(dbName=="Oracle"){
	 			strategy=new OracleStrategy();
	 		}else if(dbName=="Mysql") {
	 			strategy =new MysqlStrategy();
	 		}else if (dbName=="SQL Server") {
	 			strategy=new SQLStrategy();
	 		}
		 return strategy;
	}
	
	/**
	 * 简单工厂模式实现对数据库的连接操作.
	 */
     public static void main(String[] args) {
    	 
    	 Factory.creat("Oracle").getConnDB();
    	 Factory.creat("Mysql").getConnDB();
    	 Factory.creat("SQL Server").getConnDB();
	}

}

    简单讲,策略模式是行为型模式,强调对算法的封装;而工厂模式是创建型模式,强调对象的创建。具体自己去体会。
     至于桥接模式,它的确和策略模式很像。很多资料也那数据库连接操作DAO模式来讲述桥接模式.但我认为一些xxxDAOImpl都属于策略模式范畴(可能太咬文嚼字了吧),他们之间具体的差别,以后在表。
     其实,不管是什么模式,理解其核心思想比如,面向接口编程,高内聚低耦合等思想都是万变不离其宗的.

我觉得第一个正如楼主所示,应该属于策略模式,但我觉得facade模式那个例子是不是采用工厂方法更好呢。facade模式为一系列相关的业务逻辑提供一个统一的接口,例子中也只不过是加载驱动创建数据库连接嘛。属于创建型模式。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics