• 2.工厂设计模式


    2.工厂设计模式

    a.工厂设计模式分类

    • 1.简单工厂设计模式
    • 2.工厂方法设计模式
    • 3.抽象工厂设计模式

    b.简单工厂方法

    1.概述

    • 工厂:多条产品线,来生产不同的产品(属于同一类,不同类的产品看作多累)
    • 工厂方法:根据传入的参数生产对应的产品
    • 产品:有公共的基接口

    2.代码

    • 水果生产厂家
    • //产品接口
      interface Product{
      }
      
    • 描述:代表一切水果
    • class Apple implements Product{
          public String toString(){
              return "Apple";
          }
      }
      
      class  Banana implements Product{
          public String toString(){
              return "Banana";
          }
      }  
    • 具体的水果
    • public class SimapleFactory {
          public static Product getProduct(String name){
              Product product=null;
              switch (name){
                  case "Apple":
                      product=new Apple();
                      break;
                  case "Banana":
                      product=new Banana();
                      break;
                  default:
                      System.out.print("wrong input ");
              }
              return product;
          }
      
          public static void main(String[] args){
              System.out.println(SimapleFactory.getProduct("Apple"));
              System.out.println(SimapleFactory.getProduct("Banana"));
              System.out.println(SimapleFactory.getProduct("Pie"));
          }
      }
    • 工厂方法类 

    3.分析

    • 优点:   
        • 1.简单    
    • 缺点: 
        • 1.代码扩展行很差,每次增加一种产品都需要重新修改工厂对象。
        • 2.产品很多且种类复杂的时候,工厂对象的逻辑会比较复杂,效率也会大幅度下降
        • 3.工厂对象会成为整个系统的瓶颈    

    c.工厂方法设计模式

    1.概述

    • 1.为了优化简单工厂带来的问,每次添加产品都需要修改工厂对象的源代码,提出了工厂 方法设计模式
    • 2.每种产品都有自己的工厂
    • 3.所有的工厂有通用的接口

    2.代码

    • interface Factory{
          Product createProduct();
      }
      
      class AppleFactory implements Factory{
          public Product createProduct(){
              return new Apple();
          }
      }
      
      class BananaFactory implements Factory{
          public Product createProduct(){
              return new Banana();
          }
      }
      
      public class FactoryMethodTest {
          public static void main(String[] args){
              System.out.println(new BananaFactory().createProduct());
              System.out.println(new AppleFactory().createProduct());
          }
      }

    3.分析

    • 虽然添加新产品的时候不用修改原有的代码,但是厂品数量多到一定程度的时候,也不适合使用,因为工厂的数量实在是太多了

    d.抽象工厂方法

    1.概述

    • 1.为了解决工厂方法设计模式的问题(工厂数量过多)
    • 2.对产品进行分类
    • 3.分工厂进行生产(同类厂品放不同的工厂进行生产)

    2.代码

    • interface Factory{
          Product createApple();
          Product createBanana();
      }
      
      class MyFactory implements Factory{
          @Override
          public Product createApple(){
              return new Apple();
          }
      
          @Override
          public Product createBanana() {
              return new Banana();
          }
      }
      
      class MyFactory_1 implements Factory{
          @Override
          public Product createApple(){
              return new Apple_1();
          }
      
          @Override
          public Product createBanana(){
              return new Banana_1();
          }
      }
    • 说明:

    • 1.苹果:Apple    Apple_1
    • 2.香蕉:Banana Banana_1
    • 其中 Apple 与 Banana 由工厂一生产
    •        Apple_1与 Banana_1 由工厂儿生产
  • 相关阅读:
    纯 CSS3 卡通小火车行驶动画
    SVG 和 CSS3 实现一个超酷爱心 Like 按钮
    【转载】尝试解决在构造函数中同步调用Dns.GetHostAddressesAsync()引起的线程死锁
    Centos7 安装k8s
    [转载]log4net 的 MDC、NDC、ThreadContext 和 LogicalThreadContext
    用date获取时间戳
    k8s 排错方式总结
    glusterfs 相关总结
    kubernets 异构部署
    清除 glusterfs brick 信息
  • 原文地址:https://www.cnblogs.com/yangyunnb/p/6432959.html
Copyright © 2020-2023  润新知