浅谈设计模式------简单工厂模式

简单工厂模式:

严格来说,简单工厂不是一种设计模式,反而更像一种编程习惯。

在Java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会导致对象耦合严重,加入我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。如果我们使用工厂来生产对象,我们就只需要来和工厂打交道,彻底和对象解耦。如果要更换对象,直接在工厂里更换该对象即可,达到了对象解耦的目的。所以说,工厂模式最大的优点就是:解耦

结构:

简单工厂包含如下角色:

  • 抽象产品:定义了产品的规范,描述了产品的主要特性和功能。
  • 具体产品:实现或者继承抽象产品的子类。
  • 具体工厂:提供了创建产品的方法,调用者通过该方法来创建产品。

案例:

点咖啡。

抽象产品类:

package Factory;

//抽象产品
public abstract class Coffee {
	public abstract String getName();

}


具体产品类:(继承于抽象产品)

package Factory;

public  class LatteCoffee extends Coffee{

	@Override
	public String getName() {
		
		return "拿铁咖啡 ";
	}
	

}

package Factory;

public class AmericanCoffee extends Coffee{

	@Override
	public String getName() {
		return "美式咖啡";
	}
	

}

具体工厂类:

package Factory;

public class SimpleCoffeeFactory {
	public Coffee creatCoffee(String type) {
		Coffee coffee = null;
		if("American".equals(type)) {
			coffee = new AmericanCoffee();
		}else if("Lattee".equals(type)) {
			coffee = new LatteCoffee();
		}else {
			System.out.println("没有您所点的咖啡。");
		}
		
		return coffee;
	}

}

咖啡店:

package Factory;

public class CoffeeStore {
	public Coffee orderCoffee(String type) {
		SimpleCoffeeFactory factory = new SimpleCoffeeFactory();
		Coffee coffee = factory.creatCoffee(type);
		return coffee;
	}

}

Client端: 

package Factory;

public class Client {

	public static void main(String[] args) {
		CoffeeStore store = new CoffeeStore();
		Coffee coffee = store.orderCoffee("Lattee");
		System.out.println(coffee.getName());

	}

}

UML类图:

浅谈设计模式------简单工厂模式_第1张图片

总结:

工厂(factory)处理创建对象的细节,一旦有了simplecoffeefactory,coffeestore中的ordercoffee()就变成了此对象的客户,后期如果需要coffee对象直接从工厂中获取即可。这样也就解除了coffeestore和coffee之间的耦合。

后期如果再加新品种的咖啡,我们只需要修改工厂类的代码即可,减少了其他的操作。

优缺点:

优点:封装了创建独享的过程,而已通过参数直接获取对象,把对象的创建和业务逻辑层分开,这样就避免了修改客户代码,如果实现新功能直接修改工厂类,而不需要在原代码中修改,这样就降低了客户代码修改的可能性。

缺点:增加新产品还是需要修改工厂类的代码,违背了开闭原则。

你可能感兴趣的:(java,简单工厂模式)