工厂模式和抽象工厂模式
2016-03-01 10:16
225 查看
工厂模式和抽象工厂模式其实用的挺多的,如数据库的切换,有些公司可能会用到多个数据库。
先上工厂模式的基本代码
代码:
public abstract class Product {
//产品类的公共方法
public void method1(){
//业务逻辑处理
}//抽象方法
public abstract void method2();
}
以下为延迟加载的工厂类:
public class ProductFactory {
private static final Map<String,Product> prMap = new HashMap();
public static synchronized Product createProduct(String type) throws Exception{
Product product =null;
//如果Map中已经有这个对象
if(prMap.containsKey(type)){
product = prMap.get(type);
}else{
if(type.equals("Product1")){
product = new ConcreteProduct1();
}else{
product = new ConcreteProduct2();
}
//同时把对象放到缓存容器中
prMap.put(type,product);
}
return product;
}
}
以下为声场单例的工厂类:
public class SingletonFactory {
private static Singleton singleton;
static{
try {
Class cl= Class.forName(Singleton.class.getName());
//获得无参构造
Constructor constructor=cl.getDeclaredConstructor();
//设置无参构造是可访问的
constructor.setAccessible(true);
//产生一个实例对象
singleton = (Singleton)constructor.newInstance();
} catch (Exception e) {
//异常处理
}
}
public static Singleton getSingleton(){
return singleton;
}
}
抽象工厂:
代码略。。。
先上工厂模式的基本代码
代码:
public abstract class Product {
//产品类的公共方法
public void method1(){
//业务逻辑处理
}//抽象方法
public abstract void method2();
}
public class ConcreteProduct1 extends Product { public void method2() { //业务逻辑处理 } } public class ConcreteProduct2 extends Product { public void method2() { //业务逻辑处理 } }
public abstract class Creator { /* * 创建一个产品对象, 其输入参数类型可以自行设置 * 通常为String、 Enum、 Class等, 当然也可以为空 */ public abstract <T extends Product> T createProduct(Class<T> c); } public class ConcreteCreator extends Creator { public <T extends Product> T createProduct(Class<T> c){ Product product=null; try { product = (Product)Class.forName(c.getName()).newInstance(); } catch (Exception e) { //异常处理 } return (T)product; } } public class Client { public static void main(String[] args) { Creator creator = new ConcreteCreator(); Product product = creator.createProduct(ConcreteProduct1.class); /* * 继续业务处理 */ } }以上为工厂模式的基础代码。在其中去掉抽象工厂类即为简单工厂模式
以下为延迟加载的工厂类:
public class ProductFactory {
private static final Map<String,Product> prMap = new HashMap();
public static synchronized Product createProduct(String type) throws Exception{
Product product =null;
//如果Map中已经有这个对象
if(prMap.containsKey(type)){
product = prMap.get(type);
}else{
if(type.equals("Product1")){
product = new ConcreteProduct1();
}else{
product = new ConcreteProduct2();
}
//同时把对象放到缓存容器中
prMap.put(type,product);
}
return product;
}
}
以下为声场单例的工厂类:
public class SingletonFactory {
private static Singleton singleton;
static{
try {
Class cl= Class.forName(Singleton.class.getName());
//获得无参构造
Constructor constructor=cl.getDeclaredConstructor();
//设置无参构造是可访问的
constructor.setAccessible(true);
//产生一个实例对象
singleton = (Singleton)constructor.newInstance();
} catch (Exception e) {
//异常处理
}
}
public static Singleton getSingleton(){
return singleton;
}
}
抽象工厂:
代码略。。。
相关文章推荐
- Think in Java反刍笔记(4)---一切都是对象(第二章)
- mysql 报错 query is too large (1041 > 1024) 处理
- J2EE中容器:WEB容器、EJB容器
- 引用和指针
- 母牛故事 2018
- Java-字符串问题
- Java 异常处理
- java并发编程
- python中print的嚣技巧
- php+mysql在mac上的基本配置
- PAT-A1025 PAT Ranking(25)
- Java反射
- MavenEclipse
- @Autowired与@Resource的差别
- Java网络连接之HttpURLConnection与HttpClient 区别及联系
- 提交苹果审核App被拒原因
- JQuery 多个ID对象绑定一个click事件
- 转 Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
- iOS 在制作framework时候对aggregate的配置
- elasticsearch 建立索引以及设置相关 field属性