Cirry's Blog

反射与工厂模式设计

Oct 15, 2019
技术 java
2分钟
384字

反射与工厂模式设计

package cn.cccc.demo;
import java.lang.reflect.InvocationTargetException;
interface IService{
public void service();
}
class HouseService implements IService{
@Override
public void service() {
System.out.println("【服务】:为您的住宿提供服务");
}
}
interface IMessage{
public void send();
}
class CloudMessage implements IMessage{
35 collapsed lines
@Override
public void send() {
// TODO Auto-generated method stub
System.out.println("[消息]:发送一个云消息");
}
}
class Factory{
private Factory(){} //没有产生实例化对象,所以构造对象私有化
@SuppressWarnings("unchecked")
/**
* 获取接口实例化对象,利用泛型去传值很重要
* @param className 接口的子类
* @param clazz 描述的是一个接口的类型
* @return 如果子类存在则返回接口实例化对象
*/
public static <T> T getInstance(String className, Class<T> clazz){
T instance = null;
try {
instance = (T)Class.forName(className).getDeclaredConstructor().newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return instance;
}
}
public class Demo {
public static void main(String[] args) throws Exception {
IMessage msg = Factory.getInstance("cn.cccc.demo.CloudMessage", IMessage.class);
msg.send();
IService ser = Factory.getInstance("cn.cccc.demo.HouseService", IService.class);
ser.service();
}
}

反射与单例设计模式

package cn.cccc.demo;
class Singleton{
// 这里必须设置volatile 这样可以让其他线程的单例与主线程保持同步
private static volatile Singleton instance = null;
private Singleton(){
System.out.println("*****"+Thread.currentThread().getName()+"实例化Singleton*****");
}
// 不能给方法设置synchorized,这样的话会卡住其他线程只让一个线程进来
public static Singleton getInstance(){
if(instance == null){
// 这样所有线程都可以不阻塞的进来,但是必须在里面重新判断instance是否为空
synchronized (Singleton.class) {
if(instance == null ){
instance = new Singleton();
}
19 collapsed lines
}
}
return instance;
}
public void print(){
System.out.println("www.ccc.cn");
}
}
public class Demo {
public static void main(String[] args) throws Exception {
for(int x =0; x < 3; x++){
new Thread(()->{
Singleton.getInstance().print();
},"单例消费端"+x).start();
}
}
}
本文标题:反射与工厂模式设计
文章作者:Cirry
发布时间:Oct 15, 2019
感谢大佬送来的咖啡☕
alipayQRCode
wechatQRCode
总访问量
总访客数人次