工厂模式

举报
小鲍侃java 发表于 2021/09/10 22:47:06 2021/09/10
【摘要】 一.简单工厂模式 场景:当两种物品实现同一个接口,根据不同场景使用不同物品 目的:可以通过一个类根据不同参数实例化不同的物品,对操作统一处理。 优点:1.屏蔽内部            2.对不同的操作进行统一管理 缺点:每添加一种类别都需要修改工厂类。所以这个是不提...

一.简单工厂模式

场景:当两种物品实现同一个接口,根据不同场景使用不同物品

目的:可以通过一个类根据不同参数实例化不同的物品,对操作统一处理。

优点:1.屏蔽内部

           2.对不同的操作进行统一管理

缺点:每添加一种类别都需要修改工厂类。所以这个是不提倡的。

类图:

代码:

接口


  
  1. public interface IProduct {
  2. public void method();
  3. }

实现类


  
  1. public class ProductA implements IProduct{
  2. public void method() {
  3. System.out.println("产品A方法");
  4. }
  5. }

  
  1. public class ProductB implements IProduct{
  2. public void method() {
  3. System.out.println("产品B方法");
  4. }
  5. }

工厂类


  
  1. public class Creator {
  2. private Creator(){}
  3. public static IProduct createProduct(String productName){
  4. if (productName == null) {
  5. return null;
  6. }
  7. if (productName.equals("A")) {
  8. return new ProductA();
  9. }else if (productName.equals("B")) {
  10. return new ProductB();
  11. }else {
  12. return null;
  13. }
  14. }
  15. }

调用


  
  1. 复制代码
  2. public class Client {
  3. public static void main(String[] args) {
  4. IProduct product1 = Creator.createProduct("A");
  5. product1.method();
  6. IProduct product2 = Creator.createProduct("B");
  7. product2.method();
  8. //如果不用工厂模式
  9. ProductA product1 = new ProductA();
  10. ProductB product1 = new ProductB();
  11. }
  12. }

二.工厂方法模式

场景:简单工厂模式每添加一个物品,就需要修改工厂。为了避免修改工厂,抽象了工厂方法模式。

优点:1.避免工厂中if else的判断

           2.当添加产品时。可以不修改工厂

缺点:项目类变多了,结构变复杂了。

类图:

代码:

产品接口:


  
  1. public interface IProduct {
  2. public void method();
  3. }

产品实现类:


  
  1. public class ProductA implements IProduct{
  2. public void method() {
  3. System.out.println("产品A方法");
  4. }
  5. }

  
  1. public class ProductB implements IProduct{
  2. public void method() {
  3. System.out.println("产品B方法");
  4. }
  5. }

工厂接口:


  
  1. public interface Factory{
  2. public IProduct create();
  3. }

工厂实现类:


  
  1. public class FactoryToA implements Factory{
  2. public IProduct create(){
  3. return new ProductA();
  4. }
  5. }

  
  1. public class FactoryToB implements Factory{
  2. public IProduct create(){
  3. return new ProductB();
  4. }
  5. }

调用:


  
  1. public class Client {
  2. public static void main(String[] args) {
  3. Facotry facotry = new FacotryToA();
  4. Product product= facotry.create();
  5. product.method();
  6. Facotry facotry2 = new FacotryToB();
  7. Product product2= facotry2.create();
  8. product2.method();
  9. }
  10. }

三.抽象工厂模式

场景:产品不是一个产品,而是一系列产品。

缺点:项目类变多了,结构变复杂了。

类图:

代码:

产品接口:


  
  1. interface ProductA {
  2. void methodA();
  3. }
  4. interface ProductB {
  5. void methodB();
  6. }

产品实现


  
  1. class ProductA1 implements ProductA{
  2. public void methodA() {
  3. System.out.println("产品A1");
  4. }
  5. }
  6. class ProductA2 implements ProductA{
  7. public void methodA() {
  8. System.out.println("产品A2");
  9. }
  10. }
  11. class ProductB1 implements ProductB{
  12. public void methodB() {
  13. System.out.println("产品B1");
  14. }
  15. }
  16. class ProductB2 implements ProductB{
  17. public void methodB() {
  18. System.out.println("产品B2");
  19. }
  20. }

工厂类接口


  
  1. public interface Facotry{
  2. ProductA createProductA();
  3. ProductB createProductB();
  4. }

工厂实现类


  
  1. public class FacotryToA implements Facotry{
  2. public ProductA createProductA() {
  3. return new ProductA1();
  4. }
  5. public ProductB createProductB() {
  6. return new ProductB1();
  7. }
  8. }
  9. public class FacotryToB implements Facotry{
  10. public ProductA createProductA() {
  11. return new ProductA2();
  12. }
  13. public ProductB createProductB() {
  14. return new ProductB2();
  15. }
  16. }

调用:


  
  1. public class Client {
  2. public static void main(String[] args) throws Exception {
  3. Factory factory = new FactoryToA();
  4. ProductA productA = factory.createProductA();
  5. ProductB productB = factory.createProductB();
  6. productA.methodA();
  7. productB.methodB();
  8. Factory factory = new FactoryToB()
  9. productA = factory.createProductA();
  10. productB = factory.createProductB();
  11. productA.methodA();
  12. productB.methodB();
  13. }
  14. }

 

文章来源: baocl.blog.csdn.net,作者:小黄鸡1992,版权归原作者所有,如需转载,请联系作者。

原文链接:baocl.blog.csdn.net/article/details/102543061

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。