设计模式学习----抽象工厂模式

来源:互联网 发布:淘宝权的瞎子比赛视频 编辑:程序博客网 时间:2024/05/21 22:33

类型:创建模式

 

提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

 

实现代码

 

新建抽象工厂接口:

package car_factory_interface;

import car_interface.Icar_interface;

public interface Icar_factory {

    public Icar_interface create_threeW_car();

    public Icar_interface create_audi_car();

}


新建抽象工厂接口的高级车adv工厂实现类:

package car_factory_imple;

import car_factory_interface.Icar_factory;
import car_imple.car_3w_imple_adv;
import car_imple.car_audi_imple_adv;
import car_interface.Icar_interface;

public class car_factory_adv implements Icar_factory {

    public Icar_interface create_audi_car() {

        car_audi_imple_adv car_audi_imple_adv = new car_audi_imple_adv();
        car_audi_imple_adv.setName("奥迪A6");
        car_audi_imple_adv.setSpeed(300);

        return car_audi_imple_adv;
    }

    public Icar_interface create_threeW_car() {
       
        car_3w_imple_adv car_3w_imple_adv_ref = new car_3w_imple_adv();
        car_3w_imple_adv_ref.setName("大众A6");
        car_3w_imple_adv_ref.setSpeed(300);

        return car_3w_imple_adv_ref;
    }

}

新建抽象工厂接口的普通车low工厂实现类:

package car_factory_imple;

import car_factory_interface.Icar_factory;
import car_imple.car_3w_imple_low;
import car_imple.car_audi_imple_low;
import car_interface.Icar_interface;

public class car_factory_low implements Icar_factory {

    public Icar_interface create_audi_car() {

        car_audi_imple_low car_audi_imple_low_ref = new car_audi_imple_low();
        car_audi_imple_low_ref.setName("奥迪A6");
        car_audi_imple_low_ref.setSpeed(300);

        return car_audi_imple_low_ref;
    }

    public Icar_interface create_threeW_car() {
       
        car_3w_imple_low car_3w_imple_low_ref = new car_3w_imple_low();
        car_3w_imple_low_ref.setName("大众A6");
        car_3w_imple_low_ref.setSpeed(300);

        return car_3w_imple_low_ref;
    }

}


上面已经有抽象工厂和具体工厂的实现类了。


新建汽车接口:

package car_interface;

public interface Icar_interface {

    public void start();

    public void stop();

}

新建汽车父类:

package car_imple;

import car_interface.Icar_interface;

public class base_car_imple implements Icar_interface {

    private int speed;

    private String name;

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        this.speed = speed;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void start() {
        // TODO Auto-generated method stub

    }

    public void stop() {
        // TODO Auto-generated method stub

    }

}

新建大众高级车:

package car_imple;

import car_interface.Icar_interface;

public class car_3w_imple_adv extends base_car_imple {

    public void start() {
        System.out.println("富华版:" + this.getName() + " 车以专利技术起动了 最高速度为:"
                + this.getSpeed());
    }

    public void stop() {
        System.out.println("富华版:" + this.getName() + " 车以专利技术停车了");
    }

}


新建大众普通车:

package car_imple;

import car_interface.Icar_interface;

public class car_3w_imple_low extends base_car_imple {

    public void start() {
        System.out.println("普通版:" + this.getName() + " 车以专利技术起动了 最高速度为:"
                + this.getSpeed());
    }

    public void stop() {
        System.out.println("普通版:" + this.getName() + " 车以专利技术停车了");
    }

}


新建大众普通车:

package car_imple;

import car_interface.Icar_interface;

public class car_audi_imple_adv extends base_car_imple {

    public void start() {
        System.out.println("富华版:" + this.getName() + " 车以专利技术起动了 最高速度为:"
                + this.getSpeed());
    }

    public void stop() {
        System.out.println("富华版:" + this.getName() + " 车以专利技术停车了");
    }

}

新建奥迪普通车:

package car_imple;

import car_interface.Icar_interface;

public class car_audi_imple_low extends base_car_imple {

    public void start() {
        System.out.println("普通版:" + this.getName() + " 车以专利技术起动了 最高速度为:"
                + this.getSpeed());
    }

    public void stop() {
        System.out.println("普通版:" + this.getName() + " 车以专利技术停车了");
    }

}


新建客户端运行类:

package run_main;

import car_factory_imple.car_factory_adv;
import car_factory_interface.Icar_factory;
import car_interface.Icar_interface;

public class run_main {

    public static void main(String[] args) {

        Icar_factory Icar_factory_ref = new car_factory_adv();

        Icar_interface Icar_interface_ref = Icar_factory_ref
                .create_threeW_car();
        Icar_interface_ref.start();
        Icar_interface_ref.stop();

       
    }
}

 

工厂方法模式:

一个抽象产品类,可以派生出多个具体产品类。  

一个抽象工厂类,可以派生出多个具体工厂类。  

每个具体工厂类只能创建一个具体产品类的实例。

 

抽象工厂模式:

多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。  

一个抽象工厂类,可以派生出多个具体工厂类。  

每个具体工厂类可以创建多个具体产品类的实例。  

   

区别:

工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。  

工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

 

原创粉丝点击