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

    1.思想

      一个基础接口interface,几个类implements这个接口,另一个工厂类factory使用create方法,根据不同的情况,创建不同的接口实现类

    2.优点

      1、一个调用者想创建一个对象,只要知道其名称就可以了。

      2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。

      3、屏蔽产品的具体实现,调用者只关心产品的接口。

    3.缺点

      每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

    4.使用场景

      1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。

      2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。

    5.注意事项

      作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。

    6.代码

      1. 一个接口

    public interface Animal {
        void run();
    }

      2.三个实现类

    public class Dog implements Animal {
        public void run() {
            System.out.println("dog run");
        }
    }
    public class Cat implements Animal {
        public void run() {
            System.out.println("cat run");
        }
    }
    public class Pig implements Animal{
        public void run() {
            System.out.println("pig run");
        }
    }

      3.工厂类及使用

    public class AnimalFactory {
        public static Animal createAnimal(String animal){
            if(animal.equalsIgnoreCase("dog")){
                return new Dog();
            }else if(animal.equalsIgnoreCase("cat")){
                return new Cat();
            }else if(animal.equalsIgnoreCase("pig")){
                return new Pig();
            }else {
                return null;
            }
        }
    
        public static void main(String[] args) {
            Animal animal1=AnimalFactory.createAnimal("dog");
            animal1.run();
        }
    }
  • 相关阅读:
    leetcode 18 4Sum
    leetcode 71 Simplify Path
    leetcode 10 Regular Expression Matching
    leetcode 30 Substring with Concatenation of All Words
    leetcode 355 Design Twitte
    leetcode LRU Cache
    leetcode 3Sum
    leetcode Letter Combinations of a Phone Number
    leetcode Remove Nth Node From End of List
    leetcode Valid Parentheses
  • 原文地址:https://www.cnblogs.com/yjh1995/p/12028178.html
Copyright © 2011-2022 走看看