java 单例模式 泛型_设计模式之架构设计实例(工厂模式、单例模式、反射、泛型等)...
設(shè)計模式,
架構(gòu)設(shè)計實例,
使用到了工廠模式、單例模式、反射、泛型等
項目包結(jié)構(gòu)如下圖:
1.bean包
(1)Base.java父類
package test.bean;
public class Base {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
(2)Student.java學(xué)生類
package test.bean;
public class Student extends Base {
private String schoolbag;
public String getSchoolbag() {
return schoolbag;
}
public void setSchoolbag(String schoolbag) {
this.schoolbag = schoolbag;
}
}
(3)Teacher.java教師類
package test.bean;
public class Teacher extends Base {
private String bag;
public String getBag() {
return bag;
}
public void setBag(String bag) {
this.bag = bag;
}
}
2.factory工廠包
(1)factory.properties
1=test.factory.StudentServiceFactoryImpl
2=test.factory.TeacherServiceFactoryImpl
(2)FactoryUtil.java
package test.factory;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import test.service.IService;
import test.factory.IServiceFactory;
public class FactoryUtil {
//裝載配置
private Properties info = new Properties();
//保存各種渠道服務(wù)類列表,確保為每個機票服務(wù)類只生成一個對象
private Map service = new HashMap();
private volatile static FactoryUtil factoryUtil;
private FactoryUtil(){
init();
}
public void init(){
InputStream is = null;
try{
is=
FactoryUtil.class.getResourceAsStream("factory.properties");
info.load(is);
}catch(Exception e){
e.printStackTrace();
throw new ExceptionInInitializerError(e);
}finally{
if(is!=null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static FactoryUtil getInstance(){
if(factoryUtil==null){
synchronized(FactoryUtil.class){
if(factoryUtil==null){
factoryUtil = new FactoryUtil();
}
}
}
return factoryUtil;
}
public IService getService(Integer patten){
String mode = String.valueOf(patten);
//如果該map已經(jīng)里包含了該service就不需要再通過下面的反射再獲取了
if(service.containsKey(mode)){
return service.get(mode);
}
String classPath = info.getProperty(mode);
try {
Object obj = Class.forName(classPath).newInstance();
IServiceFactory factory = (IServiceFactory)obj;
IService iservice = factory.createService();
service.put(mode, iservice);
return iservice;
} catch (ClassNotFoundException e) {
throw new RuntimeException("沒有找到與“"+mode+"”對應(yīng)的工廠實現(xiàn)類",e);
} catch (InstantiationException e) {
throw new RuntimeException("沒有找到與“"+mode+"”對應(yīng)的工廠實現(xiàn)類",e);
} catch (IllegalAccessException e) {
throw new RuntimeException("沒有找到與“"+mode+"”對應(yīng)的工廠實現(xiàn)類",e);
}
}
}
(3)IServiceFactory.java
package test.factory;
import test.service.IService;
public interface IServiceFactory {
public IService createService();
}
(4)StudentServiceFactoryImpl.java
package test.factory;
import test.service.IService;
import test.service.StudentServiceImpl;
public class StudentServiceFactoryImpl implements
IServiceFactory {
public IService createService() {
// TODO Auto-generated method stub
return new StudentServiceImpl();
}
}
(5)TeacherServiceFactoryImpl.java
package test.factory;
import test.service.IService;
import test.service.TeacherServiceImpl;;
public class TeacherServiceFactoryImpl implements
IServiceFactory {
public IService createService() {
// TODO Auto-generated method stub
return new TeacherServiceImpl();
}
}
3.service包
(1)IService.java
package test.service;
public interface IService {
public T doWork(String request);
public T getPerson(String request);
public void eat();
}
(2)StudentServiceImpl.java
package test.service;
import test.bean.Student;
public class StudentServiceImpl implements IService {
public String doWork(String request) {
// TODO Auto-generated method stub
return "工作:學(xué)生做"+request+"作業(yè)";
}
public Student getPerson(String request) {
// TODO Auto-generated method stub
Student student = new Student();
student.setName("小明");
student.setAge("8");
student.setSchoolbag("喜羊羊牌書包");
return student;
}
public void eat() {
// TODO Auto-generated method stub
System.out.println("吃飯:學(xué)生吃飯");
}
}
(3)TeacherServiceImpl.java
package test.service;
import test.bean.Teacher;
public class TeacherServiceImpl implements IService {
public String doWork(String request) {
// TODO Auto-generated method stub
return "工作:老師批改"+request+"作業(yè)";
}
public Teacher getPerson(String request){
Teacher teacher = new Teacher();
teacher.setName("陳老師");
teacher.setAge("28");
teacher.setBag("LV男士皮包");
return teacher;
}
public void eat() {
// TODO Auto-generated method stub
System.out.println("吃飯:老師吃飯");
}
}
4.Test測試包
Test.java
package test;
import test.bean.Student;
import test.factory.FactoryUtil;
import test.service.IService;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
IService iservice = FactoryUtil.getInstance().getService(1);//1 學(xué)生
2老師
//1.通過泛型獲得對象Object然后強轉(zhuǎn)為想要的類型
String returnStr = (String)iservice.doWork("數(shù)學(xué)");
System.out.println(returnStr);//打印內(nèi)容:工作:學(xué)生做數(shù)學(xué)作業(yè)
//2.同上,通過泛型獲得對象Object然后強轉(zhuǎn)為想要的類型
Student student = (Student)iservice.getPerson("喜洋洋");
System.out.println(student.getName()+",年齡是"+student.getAge()+"歲,書包是"+student.getSchoolbag());//打印內(nèi)容:小明,年齡是8,書包是喜羊羊牌書包
//3.直接調(diào)接口的eat()方法
iservice.eat();//打印內(nèi)容:吃飯:學(xué)生吃飯
}
}
注:有問題希望大家指出,原創(chuàng),轉(zhuǎn)載請注明出處。
總結(jié)
以上是生活随笔為你收集整理的java 单例模式 泛型_设计模式之架构设计实例(工厂模式、单例模式、反射、泛型等)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 加载中_Java 6类加载中更
- 下一篇: Java注解库_Java 注解详解