设计模式--工厂模式

概要,工厂模式一般包含 【简单工厂】、【静态工厂-即单例模式】、【抽象工厂】、【工厂方法】

形容词用接口,名词用抽象类

一、简单工厂

可以定制各种交通工具,定制交通工具创建过程,比方定义一个car的简单工厂

交通工具接口

package com.longze.guosh.factory;
//交通工具接口
public interface Moveable {
    void go();
}

car对象

package com.longze.guosh.factory;
//car对象
public class Car implements Moveable{
    @Override
    public void go(){
        System.out.println("car sosososososo---");
    }
}

carFactory工厂

package com.longze.guosh.factory;
//car工厂
public class CarFactory {
    public Moveable createCar(){
        System.out.println("生产一辆车");
        return new Car();
    }
}

Main方法

package com.longze.guosh.factory;
//Main校验简单工厂
public class Main {
    public static void main(String[] args) {
        Moveable m=new CarFactory().createCar();
        m.go();
    }
}

 简单工厂:比较容易在工厂维度进行扩展

抽象工厂:比较方便在产品上进行扩展(支持各种方法,吃穿住行)

二、抽象工厂

1、抽象工厂

package com.longze.guosh.abstractFactory;

/**
 * 抽象工厂
 */
public abstract class AbstractFactory {
    abstract Food createFood();
    abstract Vehicle createVehicle();
    abstract Weapon createWeapon();
}

Food抽象类

package com.longze.guosh.abstractFactory;

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

Vehicle抽象类

package com.longze.guosh.abstractFactory;

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

Weapon抽象类

package com.longze.guosh.abstractFactory;

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

2、实体工厂

package com.longze.guosh.abstractFactory;
//魔法家族实体工厂
public class MagicFactory extends AbstractFactory{
    @Override
    Food createFood() {
        return new MushRoom();
    }

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

    @Override
    Weapon createWeapon() {
        return new MagicStick();
    }
}
package com.longze.guosh.abstractFactory;

/**
 * 现代人工厂
 */
public class ModernFactory extends AbstractFactory{
    @Override
    Food createFood() {
        return new Bread();
    }

    @Override
    Vehicle createVehicle() {
        return new Car();
    }

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

实体类

package com.longze.guosh.abstractFactory;
//食物-现代人
public class Bread extends Food{
    public void printName(){
        System.out.println("wdm");
    }
}
package com.longze.guosh.abstractFactory;
//食物-魔法家族
public class MushRoom extends Food{
    public void printName(){
        System.out.println("毒蘑菇。。。。。。");
    }
}
package com.longze.guosh.abstractFactory;
//交通-现代人
public class Car extends Vehicle{
    public void go(){
        System.out.println("Car wuwuwuwu-----");
    }
}
package com.longze.guosh.abstractFactory;
//交通-魔法家族
public class Broom extends Vehicle{
    public void go(){
        System.out.println("飞天笤竺-----");
    }
}
package com.longze.guosh.abstractFactory;
//武器-现代人
public class AK47 extends Weapon{
    public void shoot(){
        System.out.println("开枪 dududududu.....");
    }
}
package com.longze.guosh.abstractFactory;
//武器-魔法家族
public class MagicStick extends Weapon{
    public void shoot(){
        System.out.println("bianbianbian.....");
    }
}

 3、Main方法

package com.longze.guosh.abstractFactory;
//抽象工厂
public class Main {
    public static void main(String[] args) {
        AbstractFactory r=new ModernFactory();
        Vehicle c=r.createVehicle();
        c.go();
        Weapon w=r.createWeapon();
        w.shoot();
        Food f=r.createFood();
        f.printName();
    }
}

抽象工厂拓扑图

抽象工厂和简单工厂比较

简单工厂,相当于只有一个产品的抽象工厂,较容易在工厂层级自由扩展。产品层级无法自由扩展方法。

抽象工厂,有多种产品,比较容易在产品层级进行扩展,不方便在工厂层级自由扩展,需要加很多方法。

Git地址:https://gitee.com/feng-qingxuan/dessign-pattrns.git  factory 和 abstractfactory

以上结束!!

荆轲刺秦王

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值