工厂设计模式及理解

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层的封装。

原文地址:https://www.cnblogs.com/wangxiaopei/p/8551187.html