黑马程序员技术交流社区

标题: 【成都校区】静态工厂方法简解 [打印本页]

作者: 小刀葛小伦    时间: 2019-5-30 16:22
标题: 【成都校区】静态工厂方法简解
本帖最后由 小刀葛小伦 于 2019-5-30 16:25 编辑

静态工厂方法简解



对于类而言,为了让客户端获取它自身的一个实例,最常用的方法就是通过一个公有的构造器。还有一种方法,也应该在每个程序员的工具箱有一席之地。类可以提供一个公有的静态工厂方法,他只是返回类的实例的静态方法。下面是一个例子。

有一个汽车接口,两个类实现了该接口,分别是宝马和奔驰。有一个汽车生产工厂,根据客户端传入不同的参数或者调用不同的方法返回不同的实现类对象。

汽车接口:开车方法
public interface Car{
        
        void run();
}

宝马类
public class Bwm implements Car {

        @Override
        public void run() {
                System.out.println("宝马车里哭");
        }

}

奔驰类
public class bezz implements Car{

        @Override
        public void run() {
                System.out.println("奔驰盖上坐");
        }

}

汽车工厂:根据客户端传入不同的参数或者调用不同的方法返回不同的实现类对象
public class CarFactory {

         //第一种实现:根据不同参数生成不同对象
         public static Car createCar(CarType carType) {
                switch (carType) {
                        case BWM:
                                return new Bwm();
                        case BEZZ:
                                return new Bezz();
                        default:
                                throw new IllegalArgumentException();
                }
        }
        public enum CarType {
                BWM, BEZZ;
        }
        
        //第二种实现:调用不同方法生成不同对象
         public static Bwm createBwm() {
                return new Bwm();
        }
        public static Bezz createBezz() {
                return new Bezz();
        }
        
}

测试
public class Test {

        public static void main(String[] args) {
               
                Car car= null;
               
                //第一种实现:传入不同参数生成不同对象
               
                car= CarFactory.create(carType.BWM);
                car.run();
               
                car= CarFactory.create(CarType.BEZZ);
                car.run();
               
                //第二种实现:调用不同方法生成不同对象
               
                car= CarFactory.createBwm();
                car.run();
               
                car= CarFactory.createBezz();
                car.run();
        }

}
结果 :
第一种实现方式:
宝马车里哭
奔驰盖上坐


第二种实现方式:
宝马车里哭
奔驰盖上坐


静态工厂方法优势:
1.它们有名称
2.不必在每次调用他们时新建一个对象
3.它们可以返回原返回类型的任何子类型








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2