• 设计模式之工厂模式


    设计模式之工厂模式

      工厂模式专门负责将有大量的共同的接口的类实例化。工程模式可以决定哪一个类实例化,不必事先知道每次要实例化哪一个类。

      工厂模式有三种形态:
      1)简单工厂模式(Simple Factory):又称静态工厂方法模式
      2)工厂方法模式(Factory Method):又称为多形性工厂模式
      3)抽象工厂模式(Abstract Factory):又称为工具箱模式

      PS:简单工厂模式和工厂方法模式可以统称为普通工厂模式


    例:养动物为例

    public interface Animal {
        void sound();
    }
    
    public class Cat implements Animal{
        @Override
        public void sound() {
            System.out.println("喵喵。。。");
        }
    }
    
    public class Dog implements Animal {
        @Override
        public void sound() {
            System.out.println("旺旺。。。");
        }
    }

    简单工厂模式

    public class SimpleAnimalFactory {
        public static Animal keep(String arg) {
            Animal animal = null;
            switch(arg) {
            case "cat":
                animal = new Cat();
                break;
            case "dog":
                animal = new Dog();
                break;
            }
            return animal;
        }
    }

    工厂方法模式

    public interface AnimalFactory {
        Animal keep();
    }
    
    public class CatFactory implements AnimalFactory {
        @Override
        public Animal keep() {
            return new Cat();
        }
    }
    
    public class DogFactory implements AnimalFactory {
        @Override
        public Animal keep() {
            return new Dog();
        }
    }

    可以看出,每增加一种Animal就需要增加该类的工厂,当Animal种类越来越多时就会造成工厂泛滥。

    除了养小动物我们有时还会养一些花

    public interface Flower {
        void color();
    }
    
    public class Rose implements Flower {
        @Override
        public void color() {
            System.out.println("红玫瑰");
        }
    }
    
    public class Lily implements Flower {
        @Override
        public void color() {
            System.out.println("白百合");
        }
    }

    抽象工厂

    public abstract class AbstractFactory {
        abstract Animal keep();
        abstract Flower grow();
    }
    
    public class DefaultFactory extends AbstractFactory {
        @Override
        Animal keep() {
            return new Dog();
        }
    
        @Override
        Flower grow() {
            return new Rose();
        }
    }

    测试

    public class Test {
        public static void main(String[] args) {
            Animal a1 = SimpleAnimalFactory.keep("dog");
            a1.sound();
            
            AnimalFactory af = new CatFactory();
            Animal a2 = af.keep();
            a2.sound();
            
            AbstractFactory factory = new DefaultFactory();
            Animal animal = factory.keep();
            animal.sound();
            Flower flower = factory.grow();
            flower.color();
        }
    }
    作者:踮起脚尖眺望
    出处:http://www.cnblogs.com/wangj1130
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Python爬虫之Scrapy框架的简介和基础应用
    python爬虫之selenium,谷歌无头浏览器
    12.块设备驱动程序(磁盘)
    11.USB输入子系统
    10.触摸屏驱动
    9.LCD驱动架构
    8.platform驱动分离
    7.输入子系统框架
    5.标签管理
    4.分支管理
  • 原文地址:https://www.cnblogs.com/wangj1130/p/4842875.html
Copyright © 2020-2023  润新知