Java设计模式-工厂模式

工厂模式分类:

1. 简单工厂模式(静态工厂模式)

2. 工厂方法

3. 抽象工厂模式

 

1. 

/**
 * @author huzhongkang
 * @Title: ${file_name}
 * @date 2020/6/113:49
 */
public interface Car {

    void run();
}


public class Benz implements Car {
    @Override
    public void run() {
        System.out.println("奔驰 run...");
    }
}
    

public class Byd implements Car{
    @Override
    public void run() {
        System.out.println("byd run.....");
    }
}


//简单工厂方法,静态工厂方法, 这种工厂方法如果有新增产品则需要在工厂方法中修改代码。
public class SimpleFactory {

    Car getCar(String type){
        switch (type){
            case "byd" :
                return new Byd();
            case "benz" :
                return new Benz();
           default:
               return null;
        }
    }

    public static void main(String[] args) {

        SimpleFactory simpleFactory = new SimpleFactory();
        Car byd = simpleFactory.getCar("byd");
        byd.run();
    }
}

2.

public interface Car {

    void run();
}

public class Audi implements Car {
    @Override
    public void run() {
        System.out.println("audi run....");
    }
}

public class FengTian implements Car {
    @Override
    public void run() {
        System.out.println("fengtian run...");
    }
}

public class AudiFactory implements FactoryMethod {
    @Override
    public Car makeCar() {
        return new Audi();
    }
}

public class FengtianFactory implements FactoryMethod {
    @Override
    public Car makeCar() {
        return new FengTian();
    }
}

public interface FactoryMethod {

    Car makeCar();
}


/*
* 这种工厂方法,比简单工厂方法比较好的一点是  如果有新的产品加进来 不需要在原先的代码中添加, 不要修改代码
* 但是新产品需要添加新的工厂方法 生产对应产品即可。
* */
public class Test {


    public static void main(String[] args) {
        Car car = new FengtianFactory().makeCar();
        car.run();

    }
}

 

3. 静态工厂模式

//程序员和司机都要吃饭, 抽象一个实物的抽象类
public abstract class Food {

    abstract void eatFood();
}

//程序员和司机都有工作, 抽象一个统一接口
public interface Work {

    void gotoWork();
}


//泡面继承自食物
public class Paomian extends Food {
    @Override
    void eatFood() {
        System.out.println("泡面。。。。");
    }
}
//米饭继承食物
public class Rice extends Food {
    @Override
    void eatFood() {
        System.out.println("吃米饭。。。");
    }
}

//开车继承工作
public class Driver implements Work {
    @Override
    public void gotoWork() {
        System.out.println("我要去开车...我是司机");
    }
}
//it继承自工作
public class IT implements Work {
    @Override
    public void gotoWork() {
        System.out.println("我在写代码...这是我的工作");
    }
}

//抽象一个生产对象的工厂
public abstract class AbstractFactory {

    abstract Food getFood();

    abstract Work getWork();
}


//生产司机的工厂
public class DriverFactory extends AbstractFactory {
    @Override
    Food getFood() {
        return new Rice();
    }

    @Override
    Work getWork() {
        return new Driver();
    }
}


//生产it的工厂
public class ITFactory extends AbstractFactory {
    @Override
    Food getFood() {
        return new Paomian();
    }

    @Override
    Work getWork() {
        return new IT();
    }
}

//这种抽象工厂方法可以生产一个产品族 
public class Test {
    public static void main(String[] args) {

        AbstractFactory driverFactory = new ITFactory();
        driverFactory.getFood().eatFood();
        driverFactory.getWork().gotoWork();



    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值