1.概述
工厂模式按照《Java与模式》中的提法分为三类:
1) 简单工厂模式(Simple Factory)
2) 工厂方法模式(Factory Method)
3) 抽象工厂模式(Abstract Factory)
这三种模式从上到下逐步抽象,并且更具一般性。
还有一种分类法,就是将简单工厂模式看为工厂方法模式的一种特例,两个归为一类。
下面是使用工厂模式的两种情况:
1) 在编码时不能预见需要创建哪种类的实例。
2) 系统不应依赖于产品类实例如何被创建、组合和表达的细节
如图所示:工厂模式是一种创建型模式
2.三种模式详解
2.1 简单工厂模式
1) 工厂角色:负责创建所有产品。一个具体的类实现。
2) 抽象产品角色:负责所有产品的定义。接口或抽象类实现。
3) 具体产品角色:负责单个产品的细节。一个具体的类实现。
理论都有了?那么具体怎么使用呢?
//抽象产品角色 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)具体产品角色:负责单个产品的细节。一个具体的类
//抽象产品角色 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工厂模式_jsp下一页分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/45281.html