设计模式(2)

阅读: 评论:0

设计模式(2)

设计模式(2)

     工厂模式代码模型

     step1: 构造 抽象的业务逻辑接口

public interface Operaction{public void turnOn();public void turnOff();}

     step2: 具体的实现类一

public class OneOperaction implements Operaction {public void turnOn() {System.out.println("OneOperaction turnOn");        }public void turnOff() {System.out.println("OneOperaction turnOff");}}

     step3: 具体的实现类二

public class TwoOperaction implements Operaction {public void turnOn() {System.out.println("TwoOperaction turnOn");        }public void turnOff() {System.out.println("TwoOperaction turnOff");}}

      step4: 创建工厂类和实现类

public interface OperactionFactory {public Operaction createOperaction();}
public class OneOperactionFactory implements OperactionFactory {@Overridepublic Operaction createOperaction() {return new OneOperaction();}}
public class TwoOperactionFactory implements OperactionFactory {@Overridepublic Operaction createOperaction() {return new TwoOperaction();}}

       step5: 测试:

public class Test {public static void main(String[] args) {OperactionFactory operactionFactory = new OneOperactionFactory();Operaction oneOperaction =  ateOperaction();oneOperaction.turnOff();oneOperaction.turnOn();Operaction twoOperaction =  ateOperaction();twoOperaction.turnOff();twoOperaction.turnOn();。
} }

------>>------
OneOperaction turnOff
OneOperaction turnOn
OneOperaction turnOff
OneOperaction turnOn
------>>------

 

     简单工厂模式和工厂模式的区别:

     简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说。去除了与具体产品的依赖。

     比如设计一个简单的计算器客户端,只需要客户端传递"+"给工厂,工厂自动生成相应的实例,不同的实例产生不同的运算。

     但是如果我们需要添加新的方法的话,就需要在工厂类中的添加一个分支"case"。这其实就违背了"开放--关闭原则"。

     ------》》》工厂模式就是解决这类问题的:

           工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

           既然这个工厂类与分支耦合,那我们根据依赖倒转原则,把工厂类抽象出一个接口,这个接口只有一个方法,便是创建抽象产品的工厂方法。然后所有要生产具体类的工厂,就会去实现这个接口。

这样,一个简单的工厂模式的工厂类,就变成了一个抽象接口和多个具体生成对象的工厂。这样,需要添加一个方法的时候,只需要添加一个实现类和一个工程类。

         不过这种判断逻辑还是存在的,工厂方法把简单工厂的内部逻辑判断转移到了客户端代码来运行,想要添加一个功能,以前是修改工厂类,现在是修改客户端。

 

         工厂方法克服了简单工厂违背开发-封闭原则的缺点,又保持了封装对象创建过程的优点。

 

----------------JDBC 工厂类的实现 ---------

        


/**每一个驱动类都必须实现这个接口*/
public interface Driver {

Connection connect(String url, java.util.Properties info) throws SQLException; boolean acceptsURL(String url) throws SQLException; DriverPropertyInfo[] getPropertyInfo(String url, java.util.Properties info) throws SQLException; int getMajorVersion(); int getMinorVersion(); boolean jdbcCompliant(); public Logger getParentLogger() throws SQLFeatureNotSupportedException; }

 

        

/**
* 数据库厂商要提供一个数据库驱动类,它的作用可以是可以创造数据库连接,而这个数据库连接向上转型为我们JDBC的Connection。
* 数据库厂商要提供一个数据库连接的实现类,这个实现类可以执行具体数据库的各个操作,比如帮我们执行SQL,返回执行结果,关闭连接等等。
*/
public interface Connection extends Wrapper {Statement createStatement() throws SQLException;PreparedStatement prepareStatement(String sql) throws SQLException;}

 

         mysql的驱动类位于sql.jdbc.Driver,而mysql的connection实现类也在这个包中,名称是 ConnectionImpl。

         oracle也有驱动类,位于oracle.jdbc.driver.OracleDriver,相应的 oracle也有connection实现类,位于oracle.jdbc.OracleConnectionWrapper。

         一般每个数据库都会有一个 Connection的扩展接口,这个接口的作用是提供使用者针对当前数据库特殊的操作。

       

        工厂方法模式就是提供一个抽象的工厂,一个抽象的产品,在上述当中相当于Driver(数据库连接工厂)和Connection(抽象产品),实现的一方需要提供一个具体的工厂类(比如mysql驱动)和一个具体的产品(比如mysql数据库连接)。

        DriverMananger在这个设计当中扮演者一个管理者的角色,它帮我们管理数据 库驱动,让我们不需要直接接触驱动接口,我们获取连接只需要和DriverManager打交道就可以,也就是说客户端依赖于DriverManager 和Connection就可以完成工作,不再需要与Driver关联,所以上述说我们依赖于Driver和Connection,现在 DriverManager帮我们管理Driver,那我们只需要依赖于DriverManager和Connection就可以了。

 

链接:.html

    

转载于:.html

本文发布于:2024-01-31 15:54:09,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170668765229663.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模式
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23