zoukankan      html  css  js  c++  java
  • 简单工厂模式

     1、概述
         简单工厂模式 又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例

    2、 优缺点

    优点
            客户端不需要在负责对象的创建,从而明确了各个类的职责


    缺点
          这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护


     代码:

    定义一个 Animal 动物抽象类

    // 动物抽象类
    public abstract class Animal {
    
        public abstract void eat();    // 吃 的 功能
    }

    定义一个Dog类

    // 狗类 
    public class Dog extends Animal {
    
        @Override
        public void eat() {
            System.out.println("笨狗吃骨头...");
    
        }
    
    }

    定义一个Rabbit 类

    // 兔类
    public class Rabbit extends Animal {
    
        @Override
        public void eat() {
            System.out.println("兔子爱吃隔壁草...");
        }
    
    }

    代码1:常规的方式:

    public class AnimalDemo {
    
        public static void main(String[] args) {
        
            //1、 具体类
            Dog d = new Dog();
            Rabbit r = new Rabbit();
            
            d.eat();
            r.eat();
           }
    }

    结果:

    笨狗吃骨头...
    兔子爱吃隔壁草...

    代码2:通过工厂造各种 动物对象

    定义一个 AnimalFactory 动物工厂 类

    public class AnimalFactory {
        
        // 1、构造方法私有
        private AnimalFactory() {
        }
        
        
        // 2.1 创建一个 Dog类
        public static Dog createDog() {
            
            return new Dog();   
        }
        
        // 2.2  创建一个 Rabbit类
        public static Rabbit createRabbit() {
            
            return new Rabbit();   
        }
    
    }

    测试

    public class AnimalDemo {
    
        public static void main(String[] args) {
             // 简单工厂
             Dog d = AnimalFactory.createDog();
             Rabbit r = AnimalFactory.createRabbit();
             
             d.eat();
             r.eat();
    
        }
    
    }

    结果:

    笨狗吃骨头...
    兔子爱吃隔壁草...

    代码3:对工厂改进后

    package com.monkey1028;
    
    public class AnimalFactory {
        
        // 1、构造方法私有
        private AnimalFactory() {
            
        }
        // 2、
        public static Animal createAnimal(String type) {
            
            if("dog".equals(type)) {
                return new Dog();
            }
                 
            if("rabbit".equals(type)) {
                return new Rabbit();
                
            }else {
                return null;
                
            }
            
        }
            
           
    }
        
     

    测试类:

    public class AnimalDemo {
    
        public static void main(String[] args) {
            
            // 通过 AnimalFactory 动物工厂 造相应的动物对象
    
            Animal a = AnimalFactory.createAnimal("dog");
            a.eat();
            
            a = AnimalFactory.createAnimal("rabbit");
            a.eat();
            
            // 要是传入动物工厂中不存在的动物对象呢? 
            // 会产生空指针异常,所以要做判断
            
            System.out.println();
            
             a = AnimalFactory.createAnimal("pig");
            
            if(a != null) {
            a.eat();
            }else {
                System.out.println("该工厂还暂时不具备生产该动物的资质......");
            }
        }
    
    }

    结果:

    笨狗吃骨头...
    兔子爱吃隔壁草...
    
    该工厂还暂时不具备生产该动物的资质......
  • 相关阅读:
    Oracle的序列、视图、索引和表空间
    MySQL存储过程
    MySQL触发器
    MySQL索引和视图
    完整性约束
    Mybatis的核心对象及运行流程
    Mybatis中配置连接池
    IDEA中创建Maven工程整合Mybatis
    Idea中创建JavaWeb工程
    实现整数集合的并、交、差运算
  • 原文地址:https://www.cnblogs.com/penguin1024/p/11808465.html
Copyright © 2011-2022 走看看