工厂设计模式及理解
1.简单工厂设计模式
一个静态工厂类,根据传入的product的名称不同,返回不同的product,一个工厂可以生产多种类型的产品。
public interface Product {
public void create();
}
public class ProductA implements Product {
@Override
public void create() {
System.out.println("创建了一个A产品");
}
}
public class ProductB implements Product {
@Override
public void create() {
System.out.println("创建了一个B产品");
}
}
public class Factory {
public Product create(String productName){
if(productName.equals("A"))
return new ProductA();
else if(productName.equals("B"))
return new ProductB();
else
return null;
}
public static void main(String[] args) {
new Factory().create("A").create();
}
}
简单工厂模式的缺点:每增加一个产品,需要对工厂中的代码进行修改。
2.工厂方法模式
工厂方法模式,规定一个工厂生产一种产品。
public interface Product {
public void create();
}
public class ProductA implements Product {
@Override
public void create() {
System.out.println("创建了一个A产品");
}
}
public class ProductB implements Product {
@Override
public void create() {
System.out.println("创建了一个B产品");
}
}
public interface Factory2Interafce {
public Product create();
}
public class FactoryA implements Factory2Interafce {
@Override
public Product create() {
return new ProductA();
}
}
public class FactoryB implements Factory2Interafce {
@Override
public Product create() {
return new ProductB();
}
}
工厂方法模式:一个工厂生产一种产品,当增加一种产品时,需要增加一个工厂来创造他。
缺点:当产品很多时,需要很多工厂类来创建。
3.抽象工厂设计模式
抽象工厂模式,一个工厂创建一系列具有相互依赖,关联关系的产品。
public interface 洗衣机接口 {
public void 洗衣服();
}
public class A号洗衣机 implements 洗衣机接口 {
@Override
public void 洗衣服() {
System.out.println("A号洗衣机洗衣服");
}
}
public class B号洗衣机 implements 洗衣机接口 {
@Override
public void 洗衣服() {
System.out.println("B号洗衣机洗衣服");
}
}
public interface 冰箱接口 {
public void 储存();
}
public class A型号冰箱 implements 冰箱接口{
@Override
public void 储存() {
System.out.println("A号冰箱储存");
}
}
public class B号冰箱 implements 冰箱接口{
@Override
public void 储存() {
System.out.println("B号冰箱储存");
}
}
public interface FactoryInterface {
public 洗衣机接口 create洗衣机();
public 冰箱接口 create冰箱();
}
public class 生产A型号产品工厂 implements FactoryInterface {
@Override
public 洗衣机接口 create洗衣机() {
return new A号洗衣机();
}
@Override
public 冰箱接口 create冰箱() {
return new A型号冰箱();
}
}
抽象工厂模式一个工厂可以生产多种类型的产品。
4.工厂设计模式对Dao层的封装。
在我们编写的java后台架构一般是
1.持久化层Dao(<1>.Dao接口 <2>Dao实现类)
2.业务逻辑层Service(<1>Service接口 <2>ServiceImpl实现类)
3.View层
对于Service层要访问Dao层接口,来实现操作数据库。
我们可以在此处建立工厂话设计模式,达到Dao层和Service层的分离,降低耦合度,将Dao层封装起来,避免受破坏。
具体做法:
例如对于用户管理模块:
有User类,UserDao接口,UserDaoImpl实现类
UserService接口,UserServiceImpl实现类。
对于文件管理模块有:
File类,FileDao接口,FileDaoImpl实现类
FileService接口,FileServiceImpl实现类。
建立饿汉单例工厂模式:
package com.java.工厂设计模式;
/**
* @author wangpei
* @version 创建时间:2017年8月19日 下午1:51:40 类说明
*/
public class SingleFactory {
private static SingleFactory f;
private SingleFactory() {
};
public static synchronized SingleFactory getInstance() {
if (f == null)
f = new SingleFactory();
return f;
}
public <T> T create(String name, Class<T> classz) {
try {
return (T) Class.forName(name).newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) {
SingleFactory.getInstance().create("com.java.工厂设计模式.ProductA", ProductA.class).create();
}
}
通过反射机制,传入类名,类对象,生成实例对象来实现Dao层的封装。