• 简单工厂模式(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后边的类名不一样。

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

  • 相关阅读:
    ImageMagick:给png 填充指定的背景颜色(ImageMagick 6.9.10)
    imagemagick:创建指定背景色的空图片(ImageMagick 6.9.10)
    python3:用pip安装第三方库时报错Command "python setup.py egg_info" failed with error code的解决
    python:backgroundremover安装及运行中报错的处理(backgroundremover 0.1.9)
    linux:安装pytorch(python3.6.8 / pytorch 1.10.1+cu102)
    safari: css:解决translate时移动的元素闪烁(safari 15.5)
    vue.js3:用elcheckbox做复选框(vue@3.2.37 / elementplus@2.2.2)
    python:用backgroundRemover+imageMagick给人像照片更换背景色
    编写LLVM后端
    交互式 CLI
  • 原文地址:https://www.cnblogs.com/sunzhenxing19860608/p/1585239.html
Copyright © 2020-2023  润新知