2017编程提高第6节课——面向对象设计(6)
LanyuanXiaoyao's Blog ヽ(✿゚▽゚)ノ

2017编程提高第6节课——面向对象设计(6)


从数据库谈起

获取数据库连接是关键

创建数据库连接

简单工厂

使用简单工厂

优点

  • 假设 ConnectionFactory ,Connection 这些类已经打包形成了jar 文件, 无法修改源码。
  • 需求:
    1. 改名 com.mysql.MySqlConnection→com.mysql.jdbc.MySqlConnectionImpl
    2. 添加一个新的数据库

使用配置文件增加灵活性

Connnection-type.properties

mysql =  com.mysql.jdbc.MySqlConnectionImpl
db2 = com.ibm.db2.Db2ConnectionImpl
oracle = com.oracle.jdbc.OracleConnection
sqlserver = com.Microsoft.jdbc.SqlServerConnection

工厂方法

隐藏Factory实现

使用ConnectionFactoryManager

工厂方法UML 类图

建造者模式

使用构造函数

其实我想设置的是 name, idCardNum, phone这三个参数,但是我得额外设置里 -1 , null。
因为没有User(String name, String idCardNum, String phone)这样的构造函数

使用Builder

用Builder来代替构造函数

  • 优点
    • 支持多个可变参数
    • 对于使用者清晰易读
    • 在构造期给每个参数都赋予有意义的名称
  • 缺点
    • 为了创建对象,必须创建构造器
    • 代码重复

      类图

      Builder模式

单例模式

原型模式

需求

假设你开发了一个类似Phtoshop的图片处理程序, 可以编辑图片。
你做了如下操作
1.从文件中打开一个图片 (会创建一个内存的对象), 放到画布中 2 2..把图片中的背景去掉,只留下人物图像 3.把它缩小为原来的30% 4.增加一个边框 5.设置阴影效果 6.设置透明度为50%

现在你用Ctrl +C  , Ctrl +V  要复制出10个这样的图片, 程序该怎么处理呢?

需求

你在开发一个数据的分析程序, 这个程序需要从数据库中读取成千上万条数据, 然后封装成Java 对象进行处理,这个过程很耗时。

假设另外一个程序也需要对同样的一组Java对象进行处理(可能要修改), 该怎么办?

Prototype模式

原型模式多用于创建复杂的或者耗时的实例,这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。

Java clone

浅复制

深复制

作业

自制Builder 创建xml 字符串

从JDK中找出3个使用Singleton模式的类


评论