锁定老帖子 主题:由JDBC数据库连接所联想到的5种设计模式
精华帖 (0) :: 良好帖 (6) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-31
赞赏楼主的动手精神
|
|
返回顶楼 | |
发表时间:2010-05-31
mrvito 写道 迪米特法则(LCP)
迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD. 谢谢,写的比较急,幸好你指出来了,免得误人子弟. |
|
返回顶楼 | |
发表时间: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都属于策略模式范畴(可能太咬文嚼字了吧),他们之间具体的差别,以后在表。 其实,不管是什么模式,理解其核心思想比如,面向接口编程,高内聚低耦合等思想都是万变不离其宗的. |
|
返回顶楼 | |
发表时间: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模式为一系列相关的业务逻辑提供一个统一的接口,例子中也只不过是加载驱动创建数据库连接嘛。属于创建型模式。 |
|
返回顶楼 | |