设计模式学习--工厂方法模式

精髓:定义一个用于创建对象的接口,让子类决定实例化哪一个类,从而解决单个对象变化的问题。

代码:

Interface Car{

    void run();

}

class MiniCar implements Car{

    public void run(){

          System.out.println("迷你小汽车开跑");

    }

}

class BigTruck implements Car{

    public void run(){

          System.out.println("大卡车开跑");

    }

}

//简单工厂方法模式

class CarFactory{

public static Car productCar(int param){

         switch(param){

               case 1:

                     return new MiniCar();

               case 2:

                   return new BigTruck();

               default:

                   throw new Exception("不能生产这种类型的车");

         }

    }

}

//工厂方法模式--将简单工厂模式中逻辑判断参数根据参数创建对象的代码变更为若干个类  代码如下

Interface CarFactory{

     Car productCar();

}

public class MiniCarFactory{

      public Car productCar(){

            return new MiniCar();

     }

}

public class BigTruckFactory{

      public Car productCar(){

            return new BigTruck();

     }

}

//使用该模式的测试类--简单工厂模式

public class TestCar{

    private CarFactory factory;

    public CarFactory  getCarFactory(){return this.factory;}

    public void setCarFactory(CarFactory factory){this.factory=factory;}

    public void test(){

    }

}

//使用

public class Test{

   public void main(String str[]){

        //简单工厂模式

        //Car miniCar=CarFactory.productCar(1);

        //miniCar.run();

        //Car bigTruck=CarFactory.productCar(2);

        //bigTruck.run();

        //工厂方法模式

        Car miniCar=new MiniCarFactory().productCar();

        miniCar.run();

        Car bigTruck=new BigTruckFactory().productCar();

        bigTruck.run();

   }

}

对比:

简单工厂模式中工厂类类似于万能类,它知道他要创造的所有对象,每次增加不同的类时,需要修改判断逻辑。

工厂方法模式中每次增加新类时只需要增加实体类和工厂类,符合开闭原则。但要增加的实体类较多时或经常变化时则类的数量急剧增长。

工厂方法模式适用范围:

单个对象经常变化,实例化该对象的过程在使用时决定。主要是解决了扩展问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值