java设计模式基础.docx
《java设计模式基础.docx》由会员分享,可在线阅读,更多相关《java设计模式基础.docx(18页珍藏版)》请在冰点文库上搜索。
java设计模式基础
单例模式:
一个类中只能有一个实例
单例类的特点:
1)单例类只可有一个实例
2)它必须自己创立这唯一的一个实例
3)它必须给所有其它的类提供自己这一实例
两种实现方式:
1)饿汉式:
加载类的时候就初始化一个实例
2)懒汉式:
加载类的时候不初始化,当第一次使用实例时才初始化
总结单例模式:
构造方法是private权限,保证其他类无法创建该类实例,只能该类自身创建
声明一个static修饰的自身实例,保证该实例永远只是一个
提供一个public方法,返回定义的static自身实例
工厂模式:
为了代码这件的解耦
比如说Aa=newA();多处用到a对象现在想把A对象换成B对象把A对象的所有的代码都需要更改
就可以把生成对象的功能放在工厂里面,
单例模式
Singleton.java
packagecom.chinasofti.eec.singleton;
//饿汉单例模式,在初始化的时候,已经自己实例化了
publicclassSingleton{
publicStringname="zhansgan";
privatestaticSingletoninstance=null;
privateintcount=0;
static{
instance=newSingleton();
}
privateSingleton(){
System.out.println("我是饿汉单例模式"+count++);
}
publicstaticSingletongetInstance(){
returninstance;
}
}
Singleton1.java
packagecom.chinasofti.eec.singleton;
//懒汉单例模式,在第一次调用的时候实例化自己
publicclassSingleton2{
publicstaticSingleton2singleton=null;
privateSingleton2(){
System.out.println("我是懒汉单例模式");
}
publicstaticSingleton2getInstance(){
if(singleton==null){
singleton=newSingleton2();
}
returnsingleton;
}
}
Test.java
packagecom.chinasofti.eec.test;
publicclassTest{
publicstaticvoidmain(String[]args){
/*Singleton2.getInstance();
Singleton2.getInstance();
Singleton2.getInstance();*/
/*System.out.println(Runtime.getRuntime());
System.out.println(Runtime.getRuntime());*/
}
}
2工厂模式
Factory.java
packagecom.chinasofti.eec.factory;
importcom.chinasofti.eec.fruit.Fruit;
publicclassFactory{
publicstaticFruitgetInstance(Class
>c){
Fruitfruit=null;
try{
fruit=(Fruit)Class.forName(c.getName()).newInstance();
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnfruit;
}
}
Apple.java
packagecom.chinasofti.eec.fruit;
publicclassAppleimplementsFruit{
@Override
publicvoideat(){
System.out.println("我吃的是苹果");
}
}
Banana.java
packagecom.chinasofti.eec.fruit;
publicclassBananaimplementsFruit{
@Override
publicvoideat(){
System.out.println("我吃的是香蕉");
}
}
Fruit.java
packagecom.chinasofti.eec.fruit;
publicinterfaceFruit{
publicvoideat();
}
Test.java
packagecom.chinasofti.eec.test;
importcom.chinasofti.eec.factory.Factory;
importcom.chinasofti.eec.fruit.Apple;
importcom.chinasofti.eec.fruit.Banana;
publicclassTest2{
publicstaticvoidmain(String[]args){
Factory.getInstance(Apple.class).eat();
Factory.getInstance(Banana.class).eat();
}
}
3代理模式
3-1代理类
MyInvocationHandler.java
packagecom.chinasofti.eec.proxy1;
importjava.lang.reflect.InvocationHandler;
importjava.lang.reflect.Method;
importjava.lang.reflect.Proxy;
/**
*代理类
*@authorAdministrator
*
*/
publicclassMyInvocationHandlerimplementsInvocationHandler{
privateObjectobj;//被代理对象
publicObjectbind(Objectobj){
this.obj=obj;//初始化被代理对象
//动态的返回一个代理类,统一调用invoke()确定此对象实现的接口实例
returnProxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),this);
}
@Override
publicObjectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowable{
System.out.println("抛媚眼之前");
Objecttemp=method.invoke(this.obj,args);
System.out.println("抛媚眼之后");
returntemp;
}
}
Panjinlian.java
packagecom.chinasofti.eec.proxy1;
/**
*被代理类
*@authorAdministrator
*
*/
publicclassPanjinlianimplementsPrettyWomen{
@Override
publicvoidpaomeiyan(Stringname){
System.out.println("潘金莲抛媚眼给"+name);
}
}
PrettyWomen.java
packagecom.chinasofti.eec.proxy1;
/**
*定义的抛媚眼的一类人(什么事该做什么事不该做)
*@authorAdministrator
*
*/
publicinterfacePrettyWomen{
publicvoidpaomeiyan(Stringname);
}
Test.java
packagecom.chinasofti.eec.proxy1;
importcom.chinasofti.eec.proxy1.PrettyWomen;
publicclassTest{
publicstaticvoidmain(String[]args){
PrettyWomenpw=(PrettyWomen)newMyInvocationHandler().bind(newPanjinlian());
pw.paomeiyan("西门庆");
}
}
3-2被代理类
Wangpo.java
packagecom.chinasofti.eec.proxy;
publicclassWangPoimplementsPrettyWomen{
privatePrettyWomenpw=null;
publicWangPo(){
super();
}
publicWangPo(PrettyWomenpw){
this.pw=pw;
}
publicvoidpaomeiyan(){
this.pw.paomeiyan();
}
}
Panjinlian.java
packagecom.chinasofti.eec.proxy;
/**
*被代理类
*@authorAdministrator
*
*/
publicclassPanjinlianimplementsPrettyWomen{
@Override
publicvoidpaomeiyan(){
System.out.println("潘金莲抛媚眼........");
}
}
PrettyWomen.java
packagecom.chinasofti.eec.proxy;
/**
*定义的抛媚眼的一类人(什么事该做什么事不该做)
*@authorAdministrator
*
*/
publicinterfacePrettyWomen{
publicvoidpaomeiyan();
}
Test.java
packagecom.chinasofti.eec.proxy;
publicclassTest{
publicstaticvoidmain(String[]args){
WangPowp=newWangPo(newPanjinlian());
wp.paomeiyan();
}
}
链接数据库
JDBCutil.java
packagecom.chinasofti.eec.jdbcutil;
/**
*链接数据库的工具类
*/
importjava.sql.Connection;
importjava.sql.DriverManager;
publicclassJDBCutil{
publicstaticfinalStringDRIVER="oracle.jdbc.driver.OracleDriver";//orcale驱动
publicstaticfinalStringURL="jdbc:
oracle:
thin:
@localhost:
1521:
XE";//数据库的url
publicstaticfinalStringUSER="system";//用户名
publicstaticfinalStringPASSWORLD="gqk";//密码
privatestaticJDBCutilutil=null;
privatestaticConnectionconn=null;
static{
try{
Class.forName(DRIVER);
conn=DriverManager.getConnection(URL,USER,PASSWORLD);
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
privateJDBCutil(){
}
publicstaticConnectiongetConnection(){
returnconn;
}
publicstaticvoidmain(String[]args){
System.out.println(JDBCutil.getConnection());
}
}
JDBCutil2.java
packagecom.chinasofti.eec.jdbcutil;
/**
*链接数据库的工具类
*/
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.SQLException;
publicclassJDBCutil2{
publicstaticfinalStringDRIVER="oracle.jdbc.driver.OracleDriver";//orcale驱动
publicstaticfinalStringURL="jdbc:
oracle:
thin:
@localhost:
1521:
XE";//数据库的url
publicstaticfinalStringUSER="system";//用户名
publicstaticfinalStringPASSWORLD="gqk";//密码
privatestaticJDBCutil2jdbc=null;
privatestaticConnectionconn=null;
privateJDBCutil2(){
}
/*publicstaticJDBCutil2getInstance(){
if(jdbc==null){
jdbc=newJDBCutil2();
}
returnjdbc;
}*/
publicsynchronizedstaticConnectiongetConnection()throwsException{
Class.forName(DRIVER);
if(conn==null){
conn=DriverManager.getConnection(URL,USER,PASSWORLD);
}
returnconn;
}
}
JDBC登录链接数据库
1链接数据库
JDBCutil.java
packagecom.chinasofti.eec.jdbcutil;
/**
*链接数据库的工具类
*/
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.SQLException;
publicclassJDBCutil{
publicstaticfinalStringDRIVER="oracle.jdbc.driver.OracleDriver";//orcale驱动
publicstaticfinalStringURL="jdbc:
oracle:
thin:
@192.168.80.22:
1521:
XE";//数据库的url
publicstaticfinalStringUSER="system";//用户名
publicstaticfinalStringPASSWORLD="0";//密码
privatestaticJDBCutiljdbc=null;
privatestaticConnectionconn=null;
privateJDBCutil(){
}
publicsynchronizedstaticConnectiongetConnection()throwsException{
Class.forName(DRIVER);
if(conn==null){
conn=DriverManager.getConnection(URL,USER,PASSWORLD);
}
returnconn;
}
publicstaticvoidmain(String[]args)throwsException{
System.out.println(getConnection());
}
}
2实体类
User.java
packagecom.chinasofti.eec.vo;
importjava.sql.Date;
publicclassUser{
privateintid;
privateStringname;
privateDatebirthday;
privateStringpwd;
publicStringgetPwd(){
returnpwd;
}
publicvoidsetPwd(Stringpwd){
this.pwd=pwd;
}
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicDategetBirthday(){
returnbirthday;
}
publicvoidsetBirthday(Datebirthday){
this.birthday=birthday;
}
@Override
publicStringtoString(){
return"User[id="+id+",name="+name+",birthday="+birthday+"]";
}
}
3登录功能接口
UserDao.java
packagecom.chinasofti.eec.dao;
publicinterfaceUserDao{
booleanLoginInfo(Stringname,Stringpwd);
}
UserImpl.java
packagecom.chinasofti.eec.dao;
importjava.sql.Connection;
importjava.sql.ResultSet;
importjava.sql.Statement;
importcom.chinasofti.eec.jdbcutil.JDBCutil;
publicclassUserImplimplementsUserDao{
privatestaticConnectionconn=null;
privatestaticStatements=null;
privatestaticResultSetrs=null;
@Override
publicbooleanLoginInfo(Stringname,Stringpwd){
booleanflag=false;
Stringsql="select*fromCHAOSHENXUEYUANwherelast_name="+"'"+name+"'"+"andpwd="+pwd;
System.out.println(sql);
try{
conn=JDBCutil.getConnection();
s=conn.createStatement();
rs=s.executeQuery(sql);
if(rs.next()){
flag=true;
}else{
flag=false;
}
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnflag;
}
}
4服务接口降低耦合度
UserService.java
packagecom.chinasofti.eec.service;
publicinterfaceUserService{
booleanloginInfo(Stringname,Stringpwd);
}
UserServiceImpl.java
packagecom.chinasofti.eec.service;
importcom.chinasofti.eec.dao.UserDao;
importcom.chinasofti.eec.dao.UserImpl;
publicclassUserServiceImplimplementsUserService{
@Override
publicbooleanloginInfo(Stringn,Stringp){
UserDaoud=newUserImpl();
booleanfalg=ud.LoginInfo(n,p);
returnfalg;
}
}
5视图层
packagecom.chinasofti.eec.test;
importj