• 简单工厂模式(SimpleFactory)


            简单工厂模式是23种模式中最简单的模式,主要用于对象的创建。该模式可以使客户端省去创建不同对象的代码,而把对象的创建交给专门的工厂类。需要注意的是使用这种模式创建的类必须继承自相同的类,否则无法返回创建的对象。工厂类提供一个静态的方法,通过传递不同的参数给这个方法来返回需要的对象。

            下边是简单工厂模式的示例代码,注意这段代码并没有让Fish类和Bird类继承同一个类,而是让他们都实现IAnimal接口,通过这个接口来取得创建的对象。

    Fish类的代码:

    public class Fish implements IAnimal {
        public Fish(){};
        public void eat(){
            System.out.println("Fishes must eat!");
        }
        public void swim(){
            System.out.println("Fish can swim!");
        }
    }

    Bird类的代码:

    public class Bird implements IAnimal {
        public Bird(){}
        public void eat(){
            System.out.println("Birds must eat!");
        }
        public void fly(){
            System.out.println("Birds can fly!");
        }
    }

    IAnimal接口只是一个简单的方法的声明:

    public interface IAnimal {
        public void eat();
    }

    最后给出AnimalFactory类的代码:

    public class AnimalFactory {
        public static IAnimal returnAnimal(String animalName){
            if("fish".equals(animalName)){
                return new Fish();
            }else if("bird".equals(animalName)){
                return new Bird();
            }
            return null;
        }
    }

    下边测试简单工厂模式:

    public class Test {
        public static void main(String[] args) {
            IAnimal fish=AnimalFactory.returnAnimal("fish");
            fish.eat();
            IAnimal bird=AnimalFactory.returnAnimal("bird");
            bird.eat();
        }
    }

    这边程序的输出是:

    Fishes must eat!
    Birds must eat!

    测试成功!

            简单工厂模式使客户端不再负责对象的创建,而把这个工作交给专门的工厂类,这样既明确了分工,也使代码的编写更加的容易。但是简单工厂模式的缺点也是显而易见的,虽然客户端不在负责对象的创建,但是创建对象的代码并没有因此而减少,只是把他们集中在一个类的静态方法里边,当要创建的对象较多时,工厂类的代码会很长,而且都是一些相似的代码,就像上边列出的一样,创建Bird对象和创建Fish对象唯一的不同在于new后边的类名不一样。

            另外,当我们要给不同的类提供不同的初始值的时候,也就是说当类的构造函数需要不同数目或者不同类型的参数时,简单工厂模式就显示的力不从心了。简单工厂模式适用于要创建的对象比较简单的情形。需要注意的是,简单工厂模式使用了面向对象的多态性,这种多态性既可以使用类,也可使接口。

  • 相关阅读:
    【12】python模块:itsdangerous(生成临时身份令牌)
    python作业/练习/实战:下载QQ群所有人的头像
    【4】Python操作redis
    【7】Python网络请求:requests模块
    【6】Python网络请求:urllib模块
    python学习笔记:目录结构
    【9】Python接口开发:flask Demo实例
    【8】Python接口开发:PythonWEB框架之Flask
    前端学习笔记——引入css文件、样式优先级
    Yii2模型介绍
  • 原文地址:https://www.cnblogs.com/sunzhenxing19860608/p/1585239.html
Copyright © 2020-2023  润新知