• 简单工厂模式


     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("该工厂还暂时不具备生产该动物的资质......");
            }
        }
    
    }

    结果:

    笨狗吃骨头...
    兔子爱吃隔壁草...
    
    该工厂还暂时不具备生产该动物的资质......
  • 相关阅读:
    如何解决Windows 10系统下设备的声音问题
    mutex与semaphore的区别
    大端与小端,大尾与小尾,高尾端与低尾端,主机字节序与网络字节序
    详解C语言的htons和htonl函数、大尾端、小尾端
    sockaddr与sockaddr_in结构体简介
    使用socket()函数创建套接字
    struct socket 结构详解
    C语言函数sscanf()的用法
    使用 Socket 通信实现 FTP 客户端程序(来自IBM)
    C语言文件的读写
  • 原文地址:https://www.cnblogs.com/penguin1024/p/11808465.html
Copyright © 2020-2023  润新知