工厂设计模式及理解

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

add 2019.07 03
简单工厂模式(静态工厂模式)优点:
1、代码解耦,调用方不需要关心new哪个具体的对象,只需将要new对象的条件传给工厂。符合单一职责原则。
2、对一些代码的封装与保护(如上面,对dao层的封装与保护。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值