侧边栏壁纸
博主头像
程序员Jaye博主等级

但行好事,莫问前程

  • 累计撰写 15 篇文章
  • 累计创建 12 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

工厂模式 factory

codejaye
2023-06-04 / 0 评论 / 0 点赞 / 81 阅读 / 5185 字

工厂模式 factory

任意定制交通工具

以下存在3种交通工具


//魔法世界的扫把
public class Broom implements MoveAble{
    @Override
    public void go() {
        System.out.println("扫把可以飞====>");
    }
}


//现实世界的车
public class Car implements MoveAble {
    @Override
    public void go() {

        System.out.println("Car go wuwuwuwuuwuwuwu.......");

    }
}

//天上飞的飞机
public class Plane implements MoveAble {

    @Override
    public void go() {
        System.out.println("飞机===>嗖嗖嗖嗖");
    }
}

他们都有一个相同的go()方法 可以将其抽象出一个父类其他子类集成


public interface MoveAble {
    public void go();
}

任意定制生产过程

使用工厂模式 抽象出交通工具工厂,每次创建调用一个create()


/**
 * 简单工厂的可扩展性不好,每次添加一个工具需要加一个方法
 * 交通工具的工厂
 */
public class SimpleVehicleFactory {

    public Car creatCar(){

        //前置操作
        return new Car();
    }

    public Broom creatBroom(){

        //前置操作
        return new Broom();
    }

}

也可以单独为车抽象一个车的工厂


/**
 * car工厂
 */
public class CarFactory {

    /**
     * 创造汽车
     * 此处返回父类更加理想
     *
     * @return {@link MoveAble}
     */
    public MoveAble creat(){
        System.out.println("这个Car被创建出来了!");
        //前置操作
        return new Car();
    }
}

测试方法

public  class FactoryMain {
    public static void main(String[] args) {
        Car car = new Car();
        car.go();
        //可以灵活指定他的交通工具,今天开车明天开飞机
        Plane plane = new Plane();
        plane.go();
        MoveAble broom = new Broom();
        broom.go();

        CarFactory carFactory = new CarFactory();
        Car carF = (Car) carFactory.creat();
        carF.go();

    }
}

抽象工厂

任意定制产品族

名称用抽象类,形容词用接口 此处需要使用抽象工厂

定义AbstractFactory

public abstract class AbstractFactory {

    public abstract Food createFood();

    public abstract Vehicle createVehicle();

    public abstract Weapon createWeapon();
}

定义抽象产品1

public abstract class Food {
    public abstract void printName();

}

定义抽象产品2

public abstract class Vehicle {
    public abstract void go();
}

定义抽象产品3

public abstract class Weapon {
    abstract public void shoot();
}

定义产品族(现代人)

继承抽象工厂

public class ModernFactory extends AbstractFactory {
    @Override
    public Food createFood() {
        return new Bread();
    }
  
    @Override
    public Vehicle createVehicle() {
        return new Car();
    }

    @Override
    public Weapon createWeapon() {
        return new AK47();
    }
}

定义真实产品1集成对应抽象产品

public class AK47 extends Weapon {
    @Override
    public void shoot() {
        System.out.println("突突突突");
    }
}

定义真实产品2集成对应抽象产品

public class Bread extends Food {
    @Override
    public void printName() {
        System.out.println("wdm");
    }
}

定义真实产品3集成对应抽象产品

public class Car extends Vehicle {
    @Override
    public void go() {
        System.out.println("Car go wuwuwuwuuwuwuwu.......");
    }
}

定义产品族(魔法世界人)

继承抽象工厂

public class MagicFactory extends AbstractFactory {
    @Override
    public Food createFood() {
        return new MushRoom();
    }

    @Override
    public Vehicle createVehicle() {
        return new Broom();
    }

    @Override
    public Weapon createWeapon() {
        return new MgicStidk();
    }
}

定义真实产品1集成对应抽象产品

public class Broom extends Vehicle {
    @Override
    public void go() {
        System.out.println("扫把可以飞====>");
    }
}

定义真实产品2集成对应抽象产品

public class MgicStidk extends Weapon {
    @Override
    public void shoot(){
        System.out.println("点点");
    }
}

定义真实产品3集成对应抽象产品

public class MushRoom extends Food {
    @Override
    public void printName(){
        System.out.println("吃蘑菇");
    }
}
0

评论区