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 由工厂儿生产

 

posted @ 2017-02-23 13:32  疯狂的肉包  阅读(228)  评论(0编辑  收藏  举报