package
com.zj.original;
import
com.zj.utils.NoMethodTypeException;
public
class
Method {
private
int
_type
;
public
static
final
int
POST
= 0;
public
static
final
int
GET
= 1;
public
static
final
int
PUT
= 2;
public
static
final
int
DELETE
= 3;
public
Method(
int
type) {
_type
= type;
}
public
String getMethod()
throws
NoMethodTypeException {
switch
(
_type
) {
case
POST
:
return
"This is POST method"
;
case
GET
:
return
"This is GET method"
;
case
PUT
:
return
"This is PUT method"
;
case
DELETE
:
return
"This is DELETE method"
;
default
:
throw
new
NoMethodTypeException();
}
}
public
boolean
safeMethod() {
if
(
_type
==
GET
)
return
true
;
else
return
false
;
}
public
boolean
passwordRequired() {
if
(
_type
==
POST
)
return
false
;
else
return
true
;
}
}
|
package
com.zj.subclass;
public
abstract
class
Method {
public
final
static
Method createPostMethod() {
return
new
PostMethod();
}
public
final
static
Method createGetMethod() {
return
new
GetMethod();
}
public
final
static
Method createPutMethod() {
return
new
PutMethod();
}
public
final
static
Method createDeleteMethod() {
return
new
DelMethod();
}
abstract
public
String getMethod();
public
boolean
safeMethod() {
return
false
;
}
public
boolean
passwordRequired() {
return
true
;
}
}
|
package
com.zj.subclass;
public
class
PostMethod
extends
Method {
@Override
public
String getMethod() {
return
"This is POST method"
;
}
@Override
public
boolean
passwordRequired() {
return
false
;
}
}
|
package
com.zj.subclass;
public
class
GetMethod
extends
Method{
@Override
public
String getMethod() {
return
"This is GET method"
;
}
@Override
public
boolean
safeMethod() {
return
true
;
}
}
|
package
com.zj.subclass;
public
class
PutMethod
extends
Method {
@Override
public
String getMethod() {
return
"This is PUT method"
;
}
}
|
package
com.zj.subclass;
public
class
DelMethod
extends
Method{
@Override
public
String getMethod(){
return
"This is DELETE method"
;
}
}
|
package
com.zj.state;
public
interface
MethodType {
String getTypeDescription();
String getMethodDescription();
boolean
isSafe();
boolean
isRequired();
}
|
package
com.zj.state;
public
class
Post
implements
MethodType{
public
String getMethodDescription() {
return
"This is POST method"
;
}
public
String getTypeDescription() {
return
"===POST==="
;
}
public
boolean
isRequired() {
return
false
;
}
public
boolean
isSafe() {
return
false
;
}
}
|
package
com.zj.state;
public
class
Get
implements
MethodType{
public
String getMethodDescription() {
return
"This is GET method"
;
}
public
String getTypeDescription() {
return
"===GET==="
;
}
public
boolean
isRequired() {
return
true
;
}
public
boolean
isSafe() {
return
true
;
}
}
|
package
com.zj.state;
public
class
Put
implements
MethodType{
public
String getMethodDescription() {
return
"This is PUT method"
;
}
public
String getTypeDescription() {
return
"===PUT==="
;
}
public
boolean
isRequired() {
return
true
;
}
public
boolean
isSafe() {
return
false
;
}
}
|
package
com.zj.state;
public
class
Delete
implements
MethodType{
public
String getMethodDescription() {
return
"This is DELETE method"
;
}
public
String getTypeDescription() {
return
"===DELETE==="
;
}
public
boolean
isRequired() {
return
true
;
}
public
boolean
isSafe() {
return
false
;
}
}
|
package
com.zj.state;
public
class
Method {
private
MethodType
_type
;
public
Method() {
_type
=
null
;
}
public
Method(MethodType type) {
_type
= type;
}
public
String getMethod() {
return
_type
.getMethodDescription();
}
public
boolean
safeMethod() {
return
_type
.isSafe();
}
public
boolean
passwordRequired() {
return
_type
.isRequired();
}
public
void
changeType(MethodType type) {
_type
= type;
}
public
void
runAllMethods() {
MethodType[] types =
new
MethodType[] {
new
Post(),
new
Get(),
new
Put(),
new
Delete() };
for
(MethodType type : types) {
System.
out
.println(type.getTypeDescription());
changeType(type);
System.
out
.println(getMethod());
System.
out
.println(safeMethod());
System.
out
.println(passwordRequired());
}
}
}
|
package
com.zj.utils;
public
class
Client {
static
void
print(String s) {
System.
out
.println(s);
}
static
void
print(Boolean b) {
System.
out
.println(b);
}
public
static
void
main(String[] args)
throws
NoMethodTypeException {
print(
"===original==="
);
print(
"===POST==="
);
com.zj.original.Method post1 =
new
com.zj.original.Method(
com.zj.original.Method.
POST
);
print(post1.getMethod());
print(post1.safeMethod());
print(post1.passwordRequired());
print(
"===GET==="
);
com.zj.original.Method get1 =
new
com.zj.original.Method(
com.zj.original.Method.
GET
);
print(get1.getMethod());
print(get1.safeMethod());
print(get1.passwordRequired());
print(
"===PUT==="
);
com.zj.original.Method put1 =
new
com.zj.original.Method(
com.zj.original.Method.
PUT
);
print(put1.getMethod());
print(put1.safeMethod());
print(put1.passwordRequired());
print(
"===DELETE==="
);
com.zj.original.Method del1 =
new
com.zj.original.Method(
com.zj.original.Method.
DELETE
);
print(del1.getMethod());
print(del1.safeMethod());
print(del1.passwordRequired());
print(
"===subclass==="
);
print(
"===POST==="
);
com.zj.subclass.Method post2 = com.zj.subclass.Method
.createPostMethod();
print(post2.getMethod());
print(post2.safeMethod());
print(post2.passwordRequired());
print(
"===GET==="
);
com.zj.subclass.Method get2 = com.zj.subclass.Method.createGetMethod();
print(get2.getMethod());
print(get2.safeMethod());
print(get2.passwordRequired());
print(
"===PUT==="
);
com.zj.subclass.Method put2 = com.zj.subclass.Method.createPutMethod();
print(put2.getMethod());
print(put2.safeMethod());
print(put2.passwordRequired());
print(
"===DELETE==="
);
com.zj.subclass.Method del2 = com.zj.subclass.Method
.createDeleteMethod();
print(del2.getMethod());
print(del2.safeMethod());
print(del2.passwordRequired());
print(
"===state==="
);
new
com.zj.state.Method().runAllMethods();
}
}
|