学习之路---java设计模式--简单工厂、工厂方法和抽象工厂

 

 

 简单工厂和工厂方法一起

 

package org.example.ms.factory.factorymethod;

/**
 * @author Gavin.luo
 * @title: Moveable
 * @projectName MyData
 * @description:
 * @date 2022/3/10 9:18
 */
public interface Moveable {
    void go();
}

package org.example.ms.factory.factorymethod;

/**
 * @author Gavin.luo
 * @title: Car
 * @projectName MyData
 * @description:
 * @date 2022/3/8 16:58
 */
public class Car implements Moveable {


    public void go(){
        System.out.println("car go------------------->");
    }
}

package org.example.ms.factory.factorymethod;

/**
 * @author Gavin.luo
 * @title: CarFactory
 * @projectName MyData
 * @description:
 * @date 2022/3/10 9:58
 */
public class CarFactory {

    public Moveable create(){
        System.out.println("a car create-------------------------->");
        return new Car();
    }
}
package org.example.ms.factory.factorymethod;

/**
 * @author Gavin.luo
 * @title: Plane
 * @projectName MyData
 * @description:
 * @date 2022/3/10 9:15
 */
public class Plane implements Moveable{

    public void go(){
        System.out.println("plane fly------------------->");
    }
}

package org.example.ms.factory.factorymethod;

/**
 * @author Gavin.luo
 * @title: PlaneFactory
 * @projectName MyData
 * @description:
 * @date 2022/3/10 9:59
 */
public class PlaneFactory {

    public Moveable create(){
        System.out.println("a plane create --------------->");
        return new Plane();
    }
}
package org.example.ms.factory.factorymethod;

/**
 * @author Gavin.luo
 * @title: VehicleFactory
 * @projectName MyData
 * @description:  简单工厂的扩展性不好
 * @date 2022/3/10 9:33
 */
public class SimpleVehicleFactory {

    public Car createCar(){
        //before processing    可以在创建之前做一些操作  比如加权限
        return new Car();
    }

    public Plane createPlane(){
        //before processing    可以在创建之前做一些操作  比如加权限
        return new Plane();
    }

    public Broom createBroom(){
        //before processing    可以在创建之前做一些操作  比如加权限
        return new Broom();
    }
}

package org.example.ms.factory.factorymethod;

/**
 * @author Gavin.luo
 * @title: Test
 * @projectName MyData
 * @description:
 * @date 2022/3/8 16:57
 */
public class Test {
    public static void main(String[] args) {
//        Car car=new Car();
//        car.go();
//        Plane plane=new Plane();
//        plane.go();

        Moveable moveable=new Car();
        moveable.go();

        //简单工厂使用
        SimpleVehicleFactory vehicleFactory=new SimpleVehicleFactory();
        vehicleFactory.createCar().go();

        Moveable m=new CarFactory().create();
        m.go();

        Moveable mf=new PlaneFactory().create();
        mf.go();
    }
}

 

抽象工厂

在未使用抽象工厂前的代码

package org.example.ms.factory.abstractfactory;

/**
 * @author Gavin.luo
 * @title: Ak47
 * @projectName MyData
 * @description:
 * @date 2022/3/10 10:19
 */
public class Ak47 {
    public void shoot(){
        System.out.println("tu tutututu----------->");
    }
}
package org.example.ms.factory.abstractfactory;

/**
 * @author Gavin.luo
 * @title: Bread
 * @projectName MyData
 * @description:
 * @date 2022/3/10 10:20
 */
public class Bread {

    public void printName(){
        System.out.println("味多美---------->");
    }
}
package org.example.ms.factory.abstractfactory;

/**
 * @author Gavin.luo
 * @title: Car
 * @projectName MyData
 * @description:
 * @date 2022/3/10 10:19
 */
public class Car {

    public void go(){
        System.out.println("car go---------------->");
    }
}
package org.example.ms.factory.abstractfactory;

/**
 * @author Gavin.luo
 * @title: Broom
 * @projectName MyData
 * @description:
 * @date 2022/3/10 10:26
 */
public class Broom {
    public void go(){
        System.out.println("骑着扫把飞-------》");
    }
}
package org.example.ms.factory.abstractfactory;

/**
 * @author Gavin.luo
 * @title: MagicStick
 * @projectName MyData
 * @description:
 * @date 2022/3/10 10:25
 */
public class MagicStick {

    public void shoot(){
        System.out.println("电击-----》");
    }
}
package org.example.ms.factory.abstractfactory;

/**
 * @author Gavin.luo
 * @title: MushRoom
 * @projectName MyData
 * @description:
 * @date 2022/3/10 10:26
 */
public class MushRoom {

    public void printName(){
        System.out.println("吃毒蘑菇------》");
    }
}

调用是这样子的,每当我要增加某一种品类的时候就要加很多代码,比如再加外星人呢?

package org.example.ms.factory.abstractfactory;

/**
 * @author Gavin.luo
 * @title: Test
 * @projectName MyData
 * @description:
 * @date 2022/3/10 10:21
 */
public class Test {

    public static void main(String[] args) {
        //现代人
        //一个司机开着车  吃着面包  开着枪
        System.out.println("现代人");
        Car c=new Car();
        c.go();
        Bread b=new Bread();
        b.printName();
        Ak47 a=new Ak47();
        a.shoot();
        //魔法世界的人
        //一个法师骑着扫把,吃着毒蘑菇,使用魔法棒
        System.out.println("魔法世界的人");
        Broom broom=new Broom();
        broom.go();
        MushRoom mushRoom=new MushRoom();
        mushRoom.printName();
        MagicStick magicStick=new MagicStick();
        magicStick.shoot();
    }

}

使用抽象工厂后的代码如下

 

package org.example.ms.factory.abstractfactory;

/**
 * @author Gavin.luo
 * @title: AbstractFactory
 * @projectName MyData
 * @description:
 * @date 2022/3/10 10:35
 */
public abstract class AbstractFactory {

    //交通工具
    abstract  Vehicle createVhicel();
    //食物
    abstract Food createFood();
    //武器
    abstract Weapon crateWeapon();
}
package org.example.ms.factory.abstractfactory;

/**
 * @author Gavin.luo
 * @title: ModernFactory
 * @projectName MyData
 * @description: 魔法世界的工厂
 * @date 2022/3/10 11:24
 */
public class MagicFactory extends AbstractFactory{
    @Override
    Vehicle createVhicel() {
        return new Broom();
    }

    @Override
    Food createFood() {
        return new MushRoom();
    }

    @Override
    Weapon crateWeapon() {
        return new MagicStick();
    }
}
package org.example.ms.factory.abstractfactory;

/**
 * @author Gavin.luo
 * @title: FoodFactory
 * @projectName MyData
 * @description: 食物
 * @date 2022/3/10 10:36
 */
public abstract class Food {
    abstract void printName();
}
package org.example.ms.factory.abstractfactory;

/**
 * @author Gavin.luo
 * @title: Vehicle
 * @projectName MyData
 * @description:交通工具
 * @date 2022/3/10 10:39
 */
public abstract class Vehicle {
    abstract void go();
}
package org.example.ms.factory.abstractfactory;

/**
 * @author Gavin.luo
 * @title: Weapon
 * @projectName MyData
 * @description: 武器射击
 * @date 2022/3/10 10:37
 */
public abstract class Weapon {
    abstract void shoot();
}
package org.example.ms.factory.abstractfactory;

/**
 * @author Gavin.luo
 * @title: Ak47
 * @projectName MyData
 * @description:
 * @date 2022/3/10 10:19
 */
public class Ak47  extends Weapon{
    public void shoot(){
        System.out.println("tu tutututu----------->");
    }
}

package org.example.ms.factory.abstractfactory;

/**
 * @author Gavin.luo
 * @title: Bread
 * @projectName MyData
 * @description:
 * @date 2022/3/10 10:20
 */
public class Bread extends Food{

    public void printName(){
        System.out.println("味多美---------->");
    }
}
package org.example.ms.factory.abstractfactory;

/**
 * @author Gavin.luo
 * @title: Broom
 * @projectName MyData
 * @description:
 * @date 2022/3/10 10:26
 */
public class Broom extends Vehicle{
    public void go(){
        System.out.println("骑着扫把飞-------》");
    }
}
package org.example.ms.factory.abstractfactory;

/**
 * @author Gavin.luo
 * @title: Car
 * @projectName MyData
 * @description:
 * @date 2022/3/10 10:19
 */
public class Car extends Vehicle{

    public void go(){
        System.out.println("car go---------------->");
    }
}
package org.example.ms.factory.abstractfactory;

/**
 * @author Gavin.luo
 * @title: MagicStick
 * @projectName MyData
 * @description:
 * @date 2022/3/10 10:25
 */
public class MagicStick extends Weapon{

    public void shoot(){
        System.out.println("电击-----》");
    }
}
package org.example.ms.factory.abstractfactory;

/**
 * @author Gavin.luo
 * @title: MushRoom
 * @projectName MyData
 * @description:
 * @date 2022/3/10 10:26
 */
public class MushRoom extends Food{

    public void printName(){
        System.out.println("吃毒蘑菇------》");
    }
}
package org.example.ms.factory.abstractfactory;

/**
 * @author Gavin.luo
 * @title: Test
 * @projectName MyData
 * @description:
 * @date 2022/3/10 10:21
 */
public class Test {

    public static void main(String[] args) {
        //现代人
        //一个司机开着车  吃着面包  开着枪
        System.out.println("现代人");
        Car c=new Car();
        c.go();
        Bread b=new Bread();
        b.printName();
        Ak47 a=new Ak47();
        a.shoot();
        //魔法世界的人
        //一个法师骑着扫把,吃着毒蘑菇,使用魔法棒
        System.out.println("魔法世界的人");
        Broom broom=new Broom();
        broom.go();
        MushRoom mushRoom=new MushRoom();
        mushRoom.printName();
        MagicStick magicStick=new MagicStick();
        magicStick.shoot();

        System.out.println("------------------------------");

        //使用了抽象工厂后的代码
        //人类
        System.out.println("现代人");
        AbstractFactory modernFactory=new ModernFactory();
        modernFactory.createVhicel().go();
        modernFactory.createFood().printName();
        modernFactory.crateWeapon().shoot();
        //魔法世界的人
        System.out.println("魔法世界的人");
        AbstractFactory magicFactory=new MagicFactory();
        magicFactory.createVhicel().go();
        magicFactory.createFood().printName();
        magicFactory.crateWeapon().shoot();

        //就算以后要增加外星人、底下人、宇宙人  只需要增加抽象工厂和具体的实现,可随意扩展
    }

}

那么问题来了

我们进行优化

那就是SpringBean工厂

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值