需求如下:
首先来分析下需求:需要支持三种数据库软件,要生产三种接口,以后可能还有更多,所以有工厂方法即工厂方法设计模式,如果要在工厂方法上再上升一个维度的话就是抽象工厂设计模式。
设计图如下:
代码如下:
interface connection {
public void connect();
public void drop();
public void add(String s);
public void delete(String s);
public void update(String s);
public String search(String s);
}
class MySQLConnection implements connection {
public void connect() {
System.out.println("MySQL connect");
}
public void drop() {
System.out.println("MySQL connection drop");
}
public void add(String s) {};
public void delete(String s) {};
public void update(String s) {};
public String search(String s) {
String nullptr = null;
return nullptr;
};
}
class OracleConnection implements connection {
public void connect() {
System.out.println("Oracle connect");
}
public void drop() {
System.out.println("Oracle connection drop");
}
public void add(String s) {};
public void delete(String s) {};
public void update(String s) {};
public String search(String s) {
String nullptr = null;
return nullptr;
};
}
class SQLConnection implements connection {
public void connect() {
System.out.println("SQL connect");
}
public void drop() {
System.out.println("SQL connection drop");
}
public void add(String s) {};
public void delete(String s) {};
public void update(String s) {};
public String search(String s) {
String nullptr = null;
return nullptr;
};
}
interface connectionFactory {
public connection createConnection();
}
abstract class FactoryProducer {
public connectionFactory createFactory() {
return null;
}
}
class MySQLconFactory implements connectionFactory {
public MySQLConnection createConnection() {
return new MySQLConnection();
}
}
class OracleconFactory implements connectionFactory {
public OracleConnection createConnection() {
return new OracleConnection();
}
}
class SQLconFactory implements connectionFactory {
public SQLConnection createConnection() {
return new SQLConnection();
}
}
public class Main {
public static void main(String[] args) {
connectionFactory MySQLFactory = new MySQLconFactory();
MySQLConnection mysqlConnect = (MySQLConnection) MySQLFactory.createConnection();
mysqlConnect.connect();
}
}
此外需求中还提到同一个容器中所有应用程序共享同一个连接池对象,因此要用单例模式,懒汉模式和饿汉模式需求中没有区分,当时我有时间也有精力还有心情比较好就都实现了下,设计图如下:
代码如下:
class SigletonConnection {// 懒汉模式
private static SigletonConnection sigletonCon;
private SigletonConnection(){
if (sigletonCon == null) {
synchronized (SigletonConnection.class) {
if (sigletonCon == null) {
sigletonCon = new SigletonConnection();
}
}
}
};
public static SigletonConnection getInstance() {
return sigletonCon;
}
}
public class Singleton {
}
class SigletonConnection {// 饿汉模式
private static SigletonConnection sigletonCon = new
SigletonConnection() {
};
private SigletonConnection(){};
public static SigletonConnection getInstance() {
return sigletonCon;
}
}
public class Singleton {
}
这次拿了100分,感觉是运气使然,下一次要继续努力,付出该付出的代价,但结果就顺其自然吧。