简单工厂模式

Posted shun998

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单工厂模式相关的知识,希望对你有一定的参考价值。

1.要什么实例就造什么对象(对象接收)

技术图片
public class Cat {
    //生产
    public void get() {
        System.out.println("生产一只猫");
    }
}
public class Dog {
    //生产
    public void get() {
        System.out.println("生产一条狗");
    }
}
public class MainClass {
    public static void main(String[] args) {
        //实例对象
        Dog dog = new Dog();
        Cat cat = new Cat();
        dog.get();
        cat.get();
    }
}
View Code

2.要什么实例就造什么对象(接口父类接收)

技术图片
public interface Animal {
    //生产动物
    public void get();
}
public class Dog implements Animal{
    //生产
    public void get() {
        System.out.println("生产一条狗");
    }
}
public class Cat implements Animal {
    //生产
    public void get() {
        System.out.println("生产一只猫");
    }
}
public class MainClass {
    public static void main(String[] args) {
      /*  //实例对象
        Dog dog = new Dog();
        Cat cat = new Cat();
        dog.get();
        cat.get();*/
        Animal dog = new Dog();
        Animal cat = new Cat();
        dog.get();
        cat.get();
    }
}
View Code

3.要什么实例就造什么对象(接口父类接收,工厂造)

技术图片
public class AnimalFactory {
    public static Animal getDog() {
        return new Dog();
    }

    public static Animal getCat() {
        return new Cat();
    }
}
public class MainClass {
    public static void main(String[] args) {
      /*  //实例对象
        Dog dog = new Dog();
        Cat cat = new Cat();
        dog.get();
        cat.get();*/
       /* Animal dog = new Dog();
        Animal cat = new Cat();
        dog.get();
        cat.get();*/
        Animal dog = AnimalFactory.getDog();
        dog.get();
        AnimalFactory.getCat().get();
    }
}
View Code

4.要什么实例就造什么对象(接口父类接收,工厂造,提供参数)

技术图片
public class AnimalFactory {
  /*  public static Animal getDog() {
        return new Dog();
    }

    public static Animal getCat() {
        return new Cat();
    }*/

    public static Animal getAnimal(String type) throws IllegalAccessException, InstantiationException {
        if ("dog".equalsIgnoreCase(type)) {
            return Dog.class.newInstance();
        } else if ("cat".equalsIgnoreCase(type)) {
            return Cat.class.newInstance();
        } else {
            System.out.println("目前工厂还造不出来");
            return null;
        }
    }
}
public class MainClass {
    public static void main(String[] args) throws InstantiationException, IllegalAccessException {
      /*  //实例对象
        Dog dog = new Dog();
        Cat cat = new Cat();
        dog.get();
        cat.get();*/
       /* Animal dog = new Dog();
        Animal cat = new Cat();
        dog.get();
        cat.get();*/
      /*  Animal dog = AnimalFactory.getDog();
        dog.get();
        AnimalFactory.getCat().get();*/
        Animal dog = AnimalFactory.getAnimal("dog");
        dog.get();
    }
}
View Code

5.要什么实例就造什么对象(接口父类接收,工厂造,提供参数,需要传递全类名

技术图片
    public static Animal getAnimal(String type) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
        /*if ("dog".equalsIgnoreCase(type)) {
            return Dog.class.newInstance();
        } else if ("cat".equalsIgnoreCase(type)) {
            return Cat.class.newInstance();
        } else {
            System.out.println("目前工厂还造不出来");
            return null;
        }*/
        Class animal = Class.forName(type);
        return (Animal) animal.newInstance();
    }
   Animal dog = AnimalFactory.getAnimal("com.zs.Dog");
        dog.get();
View Code

小结:简单工厂模式就注意三种角色,工厂类,父类(接口),子类(实现类);使用形式也比较通俗易懂,充分利用了面向对象的多态性,在java操作数据库的接口中就暴露了jdbc统一接口,

好处就是造能造出来的对象很容易,缺点就是造一个不存在的对象需要添加子类,修改接口,修改工厂类实例方法,耦合性很有点高,有模板才能造,麻烦在于造模板,严重违反开闭原则。

以上是关于简单工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习——简单工厂模式工厂模式抽象工厂模式

PHP面向对象之选择工厂和更新工厂

设计模式-简单工厂工厂方法模式抽象工厂模式详解

设计模式之简单工厂模式

C++工厂模式(简单工厂工厂方法抽象工厂)

C++工厂模式(简单工厂工厂方法抽象工厂)