java工厂模式

java工厂模式1.概述工厂模式按照《Java与模式》中的提法分为三类:1)简单工厂模式(SimpleFactory)2)工厂方法模式(FactoryMethod)3)抽象工厂模式(AbstractFactory)这三种模式从上到下逐步抽象,并且更具一般性。还有一种分类法,就是将简单工厂模式

大家好,欢迎来到IT知识分享网。

1.概述

工厂模式按照《Java与模式》中的提法分为三类:

1) 简单工厂模式(Simple Factory)

2) 工厂方法模式(Factory Method)

3) 抽象工厂模式(Abstract Factory)

这三种模式从上到下逐步抽象,并且更具一般性。

还有一种分类法,就是将简单工厂模式看为工厂方法模式的一种特例,两个归为一类。

下面是使用工厂模式的两种情况:

1) 在编码时不能预见需要创建哪种类的实例。

2) 系统不应依赖于产品类实例如何被创建、组合和表达的细节

java工厂模式

 如图所示:工厂模式是一种创建型模式

2.三种模式详解

2.1 简单工厂模式

1) 工厂角色:负责创建所有产品。一个具体的类实现。

2) 抽象产品角色:负责所有产品的定义。接口或抽象类实现。

3) 具体产品角色:负责单个产品的细节。一个具体的类实现。

 java工厂模式

理论都有了?那么具体怎么使用呢?

//抽象产品角色
public interface Tesla{
    public void createTesla();
}

//具体产品角色
public class Model3 implement Tesla{
    @Override
    public void createTesla(){
        System.out.println("create a model3..."); 
    }
}
public class Modely implement Tesla{
    @Override
    public void createTesla(){
        System.out.println("create a model y..."); 
    }
}

//工厂角色
public class TeslaFactory{
  //创建所需的类实例
  public static Tesla getTesla(String model){
    if ("3".equals(model)){
      return new Model3();
    }else if ("y".equals(model)){
      return new Modely();
    }
  }
}

//客户端
public class Customer{
  public static void main(String[] args){    
    Tesla tesla = getTesla("3");
    tesla.createTesla();
  }
}

 简单工厂优点:实现简单;客户端使用产品时不用自己去创建(new产品实例),只需告诉工厂我需要使用什么产品,即可得到产品。

 简单工厂缺点:如果新增一个产品的话会对工厂类代码进行重写,不符合开闭原则(扩展开放,修改关闭)。

2.2 工厂方法模式

1)抽象工厂角色:负责所有工厂的定义。抽象类或者接口来实现。

2)具体工厂角色:单个具体的工厂,负责生产单个对应的产品。一个具体的类来实现。

3)抽象产品角色:负责所有产品的定义。接口或抽象类实现。

4)具体产品角色:负责单个产品的细节。一个具体的类

java工厂模式

//抽象产品角色
public interface Tesla{
    public void createTesla();
}

//具体产品角色
public class Model3 implement Tesla{
    @Override
    public void createTesla(){
        System.out.println("create a model3..."); 
    }
}
public class Modely implement Tesla{
    @Override
    public void createTesla(){
        System.out.println("create a model y..."); 
    }
}

//抽象工厂角色
public interface TeslaFactory{
  public Tesla getTesla();
}

//具体工厂角色
public class Model3Factory implement TeslaFactory{
    @Override
    public Tesla getTesla(){
        return new Model3(); 
    }
}
public class ModelyFactory implement TeslaFactory{
    @Override
    public Tesla getTesla(){
        return new Modely(); 
    }
}
//客户端 public class Customer{   public static void main(String[] args){         Tesla tesla = new Model3Factory().getTesla();     tesla.createTesla();   } }

工厂方法优点:符合开闭原则,增加⼀个产品类,只需要实现其他具体的产品类和具体的⼯⼚类;符合单⼀职责原则,每个⼯⼚只负责⽣产对应的产品。

工厂方法缺点:每个产品需要有对应的具体⼯⼚和具体产品类;类的个数容易过多,增加复杂度。

2.3 抽象工厂模式

1)抽象工厂角色:负责所有工厂的定义,并包含所有产品的定义。抽象类或者接口来实现。

2)具体工厂角色:负责生产对应的产品族。一个具体的类来实现。

3)抽象产品角色:负责单个产品的定义。接口或抽象类实现。

4)具体产品角色:负责单个产品的细节。一个具体的类

java工厂模式

//待续

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/27701.html

(0)
上一篇 2023-09-20 19:33
下一篇 2023-09-20 21:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信