java设计模式--工厂模式

  前面咱们介绍了简单工厂模式,今天咱们来看一下工厂模式。ide

  工厂模式的定义为:定义一个用于建立对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到子类。spa

  咱们看如下例子。首先是产品类,用来定义共产所生产的部分产品,这部分代码和简单工厂模式的代码相同。code

//产品接口
public
interface Product { void run(); } //具体产品 public class Bicycle implements Product { @Override public void run() { System.out.println("ride on a bicycle"); } } public class Car implements Product { @Override public void run() { System.out.println("drive car"); } }

 

  接下来是和简单工厂不一样的地方,首先咱们先回忆一下以前简单工厂的工厂类对象

//简单工厂的工厂类
public
class Factory { public static void createProduct(String productName){ Product product = null; switch (productName){ case "car": product = new Car(); break; case "bicycle" : product = new Bicycle(); break; } product.run(); } }

 

  接下来咱们看一下工厂模式下的工厂类,这里把工厂区分为了各个产品的工厂,抽取出一个工厂接口,在每一个具体的工厂中建立产品类的实例。blog

//工厂接口
public
interface IFactory {
   //建立产品 Product createProduct(); }
//具体工厂
public class CarFactory implements IFactory { @Override public Product createProduct() {
     //建立产品实例对象
return new Car(); } } public class BicycleFactory implements IFactory { @Override public Product createProduct() { return new Bicycle(); } }

 

  最后咱们看一下简单工厂模式和工厂模式客户端实现的区别接口

//简单工厂模式下客户端
public
class Customer { public static void main(String[] args) { Factory.createProduct("car"); Factory.createProduct("bicycle"); } }

 

//工厂模式下的客户端 把简单工厂模式下的工厂类中判断建立产品实例的逻辑移动到了客户端中,由客户端来判断
public
class Customer { public static void main(String[] args) { IFactory carFactory = new CarFactory(); Product car = carFactory.createProduct(); car.run(); IFactory bicycleFactory = new BicycleFactory(); Product bicycle = bicycleFactory.createProduct(); bicycle.run(); } }

  

  咱们能够看到简单工厂模式中,客户端只须要把本身的需求中告诉工厂,工厂能够本身去判断生产哪个产品,这种模式的优势就是去除了客户端与产品的依赖,可是每次咱们增长新产品时都要去修改工厂类,这样就有可能对其余产品产生影响,违反了开放-封闭原则,并且工厂和产品分支耦合,根据依赖倒转原则,才有了后来的工厂方法。正如上文工厂模式定义的那样,咱们建立了一个IFactory接口,而后定义了多个具体产品工厂类实现这个接口,在具体产品工厂类中生产产品(建立产品实例),这样每次咱们新增产品时,就不用去改原来的工厂方法,只须要添加新的工厂就能够了。产品

相关文章
相关标签/搜索