Java中有很多设计模式,在网上也有很多设计模式的教程和资料,讲解的也比较详细,对我在学习中产生的问题提供了很大的帮助,但是经常有一些问题查了很多博客也无法再找到答案,所以我希望能填补一些这方面的空白,将我在日常学习过程的理解和想法写下来,并能和关心此类问题同学和朋友一起讨论一下。
设计模式是一套被反复使用,高效率、安全稳定且能解耦合,能够进行高效开发,降低代码冗余易于维护的一种编码习惯。本文将重点讨论设计模式中的工厂模式。由于本文在技术实现上比较浅显,只包含工厂模式基础简介和比较适合用法,适合新手学习,如果您有更好的想法或者实现方式,欢迎在本文下留言或者通过longctw@outlook.com联系我。
**************************下面是重点内容********************
一、简介
工厂模式和抽象工厂模式是在日常开发中使用非常广泛的设计模式。主要用于实现将对象的实例化部分取出来,进而优化系统架构,增强系统的扩展性。
提供一个用于创建对象的接口(工厂接口),让其实现类(工厂实现类)决定实例化哪一个类(产品类),并且由该实现类创建对应类的实例。
二、简单工厂模式和抽象工厂模式
- 简单工厂模式即通过不同参数来获取相应的实例化对象,由工厂方法决定实例化对象。
-
抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构。
三、代码实现
简单工厂模式
public class SimplePizzaFactory {
/**
* 根据传入的type参数,返回相应的pizza
* @param type
* @return
*/
public Pizza createPizza(String type) { //一般这个方法为static
Pizza pizza = null;
if (type.equals("cheese")) {
pizza = new CheesePizza();
} else if (type.equals("pepperoni")) {
pizza = new PepperoniPizza();
} else if (type.equals("clam")) {
pizza = new ClamPizza();
} else if (type.equals("veggie")) {
pizza = new VeggiePizza();
}
return pizza;
}
}
抽象工厂模式
interface IProduct1 {
public void show();
}
interface IProduct2 {
public void show();
}
class Product1 implements IProduct1 {
public void show() {
System.out.println("这是1型产品");
}
}
class Product2 implements IProduct2 {
public void show() {
System.out.println("这是2型产品");
}
}
interface IFactory {
public IProduct1 createProduct1();
public IProduct2 createProduct2();
}
class Factory implements IFactory{
public IProduct1 createProduct1() {
return new Product1();
}
public IProduct2 createProduct2() {
return new Product2();
}
}
public class Client {
public static void main(String[] args){
IFactory factory = new Factory();
factory.createProduct1().show();
factory.createProduct2().show();
}
}
四、总结
在抽象工厂模式中,有一个产品族的概念:所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族。抽象工厂模式所提供的一系列产品就组成一个产品族;而工厂方法提供的一系列产品称为一个等级结构。