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

代码:
接口
  
   - 
    
     
    
    
     
      public interface IProduct {
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public void method();
     
    
- 
    
     
    
    
     
      }
     
    
 实现类
  
   - 
    
     
    
    
     
      public class ProductA implements IProduct{
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public void method() {
     
    
- 
    
     
    
    
     
              System.out.println("产品A方法");
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      }
     
    
 
  
   - 
    
     
    
    
     
      public class ProductB implements IProduct{
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public void method() {
     
    
- 
    
     
    
    
     
              System.out.println("产品B方法");
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      }
     
    
 工厂类
  
   - 
    
     
    
    
     
      public class Creator {
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         private Creator(){}
     
    
- 
    
     
    
    
         
     
    
- 
    
     
    
    
         public static IProduct createProduct(String productName){
     
    
- 
    
     
    
    
             if (productName == null) {
     
    
- 
    
     
    
    
                 return null;
     
    
- 
    
     
    
    
     
              }
     
    
- 
    
     
    
    
             if (productName.equals("A")) {
     
    
- 
    
     
    
    
                 return new ProductA();
     
    
- 
    
     
    
    
     
              }else if (productName.equals("B")) {
     
    
- 
    
     
    
    
                 return new ProductB();
     
    
- 
    
     
    
    
     
              }else {
     
    
- 
    
     
    
    
                 return null;
     
    
- 
    
     
    
    
     
              }
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
     
      }
     
    
 调用
  
   - 
    
     
    
    
     
      复制代码
     
    
- 
    
     
    
    
     
      public class Client {
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public static void main(String[] args) {
     
    
- 
    
     
    
    
     
              IProduct product1 = Creator.createProduct("A");
     
    
- 
    
     
    
    
     
              product1.method();
     
    
- 
    
     
    
    
             
     
    
- 
    
     
    
    
     
              IProduct product2 = Creator.createProduct("B");
     
    
- 
    
     
    
    
     
              product2.method();
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
             //如果不用工厂模式
     
    
- 
    
     
    
    
     
              ProductA product1 = new ProductA();
     
    
- 
    
     
    
    
     
              ProductB product1 = new ProductB();
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
     
      }
     
    
 二.工厂方法模式
场景:简单工厂模式每添加一个物品,就需要修改工厂。为了避免修改工厂,抽象了工厂方法模式。
优点:1.避免工厂中if else的判断
2.当添加产品时。可以不修改工厂
缺点:项目类变多了,结构变复杂了。
类图:

代码:
产品接口:
  
   - 
    
     
    
    
     
      public interface IProduct {
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public void method();
     
    
- 
    
     
    
    
     
      }
     
    
 产品实现类:
  
   - 
    
     
    
    
     
      public class ProductA implements IProduct{
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public void method() {
     
    
- 
    
     
    
    
     
              System.out.println("产品A方法");
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      }
     
    
 
  
   - 
    
     
    
    
     
      public class ProductB implements IProduct{
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public void method() {
     
    
- 
    
     
    
    
     
              System.out.println("产品B方法");
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      }
     
    
 工厂接口:
  
   - 
    
     
    
    
     
      public interface Factory{
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public IProduct create();
     
    
- 
    
     
    
    
     
      }
     
    
 工厂实现类:
  
   - 
    
     
    
    
     
      public class FactoryToA implements Factory{
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public IProduct create(){
     
    
- 
    
     
    
    
             return new ProductA();
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      } 
     
    
 
  
   - 
    
     
    
    
     
      public class FactoryToB implements Factory{
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public IProduct create(){
     
    
- 
    
     
    
    
             return new ProductB();
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      } 
     
    
 调用:
  
   - 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      public class Client {
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public static void main(String[] args) {
     
    
- 
    
     
    
    
     
              Facotry facotry = new FacotryToA();
     
    
- 
    
     
    
    
     
              Product product= facotry.create();
     
    
- 
    
     
    
    
     
              product.method();
     
    
- 
    
     
    
    
             
     
    
- 
    
     
    
    
     
              Facotry facotry2 = new FacotryToB();
     
    
- 
    
     
    
    
     
              Product product2= facotry2.create();
     
    
- 
    
     
    
    
     
              product2.method();
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
     
      }
     
    
 三.抽象工厂模式
场景:产品不是一个产品,而是一系列产品。
缺点:项目类变多了,结构变复杂了。
类图:

代码:
产品接口:
  
   - 
    
     
    
    
     
      interface ProductA {
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         void methodA();
     
    
- 
    
     
    
    
     
      }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      interface ProductB {
     
    
- 
    
     
    
    
         
     
    
- 
    
     
    
    
         void methodB();
     
    
- 
    
     
    
    
     
      }
     
    
 产品实现
  
   - 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      class ProductA1 implements ProductA{
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public void methodA() {
     
    
- 
    
     
    
    
     
              System.out.println("产品A1");
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
         
     
    
- 
    
     
    
    
     
      }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      class ProductA2 implements ProductA{
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public void methodA() {
     
    
- 
    
     
    
    
     
              System.out.println("产品A2");
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
         
     
    
- 
    
     
    
    
     
      }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      class ProductB1 implements ProductB{
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public void methodB() {
     
    
- 
    
     
    
    
     
              System.out.println("产品B1");
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
         
     
    
- 
    
     
    
    
     
      }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      class ProductB2 implements ProductB{
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public void methodB() {
     
    
- 
    
     
    
    
     
              System.out.println("产品B2");
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
         
     
    
- 
    
     
    
    
     
      }
     
    
 工厂类接口
  
   - 
    
     
    
    
     
      public interface Facotry{
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         ProductA createProductA();
     
    
- 
    
     
    
    
         
     
    
- 
    
     
    
    
         ProductB createProductB();
     
    
- 
    
     
    
    
         
     
    
- 
    
     
    
    
     
      }
     
    
 工厂实现类
  
   - 
    
     
    
    
     
      public class FacotryToA implements Facotry{
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public ProductA createProductA() {
     
    
- 
    
     
    
    
             return new ProductA1();
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public ProductB createProductB() {
     
    
- 
    
     
    
    
             return new ProductB1();
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      public class FacotryToB implements Facotry{
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public ProductA createProductA() {
     
    
- 
    
     
    
    
             return new ProductA2();
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public ProductB createProductB() {
     
    
- 
    
     
    
    
             return new ProductB2();
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      }
     
    
 调用:
  
   - 
    
     
    
    
     
      public class Client {
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
         public static void main(String[] args) throws Exception {
     
    
- 
    
     
    
    
     
              Factory factory = new FactoryToA();
     
    
- 
    
     
    
    
     
              ProductA productA = factory.createProductA();
     
    
- 
    
     
    
    
     
              ProductB productB = factory.createProductB();
     
    
- 
    
     
    
    
     
              productA.methodA();
     
    
- 
    
     
    
    
     
              productB.methodB();
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
              Factory factory = new FactoryToB()
     
    
- 
    
     
    
    
     
              productA = factory.createProductA();
     
    
- 
    
     
    
    
     
              productB = factory.createProductB();
     
    
- 
    
     
    
    
     
              productA.methodA();
     
    
- 
    
     
    
    
     
              productB.methodB();
     
    
- 
    
     
    
    
     
          }
     
    
- 
    
     
    
    
     
      }
     
    
 
文章来源: baocl.blog.csdn.net,作者:小黄鸡1992,版权归原作者所有,如需转载,请联系作者。
原文链接:baocl.blog.csdn.net/article/details/102543061
        【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
            cloudbbs@huaweicloud.com
        
        
        
        
        - 点赞
- 收藏
- 关注作者
 
             
           
评论(0)