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

    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统一接口,

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

  • 相关阅读:
    怎样用wordpress建立一个博客
    TCP三次握手
    抓取动态页面
    Controller的激活
    使用PHPnow搭建本地wordpress
    自己动手从头制作WordPress主题探索add_action和do_action
    Cat in dotNET
    如何在本地搭建Wordpress环境
    Windows7下Emacs的安装
    Windows下Emacs的安装
  • 原文地址:https://www.cnblogs.com/shun998/p/12685751.html
Copyright © 2011-2022 走看看