zoukankan      html  css  js  c++  java
  • 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 由工厂儿生产
  • 相关阅读:
    有趣的面试题 11 单向链表
    CLR via C# 读书笔记 13 前台线程和后台线程
    c# 使用 new 操作符构造新对象中做了一些什么 (简单版)
    CLR via C# 读书笔记 11 何时使用线程或者线程池
    CLR via C# 读书笔记 31 一种单实例应用程序的实现(信号量)
    延时加载lazyload
    [评论]为什么中国的程序员技术偏低
    关于陈列设计和一些细节的体验
    滚动
    JavaScript 的 parseInt 取整
  • 原文地址:https://www.cnblogs.com/yangyunnb/p/6432959.html
Copyright © 2011-2022 走看看