美文网首页程序员
工厂设计模式

工厂设计模式

作者: 业余的猫 | 来源:发表于2017-01-04 17:10 被阅读0次

工厂:故名思议,就是用来制造各种产品的,在程序中主要是用来创建对象。

  • 首先介绍下简单工厂(也称静态工厂)
class Car{
    
    public void run(){
        System.out.println("小车正在跑。。");
    }
}

public class SampleFactoryTest {

    public static void main(String[] args) {
        //调用者创建一个Car
        Car car = new Car();
        //调用者调用run方法
        car.run();
    }
}

通过以上代码,你有没有发现一个问题。就是调用者(main方法)在调用小车的run()之前还需要创建一个Car对象,就好比你想要开车,你会不会自己先做一辆车然后再去开?我想你不会的。所以为了让调用者和创建者分离,工厂设计模式应允而生。

class Car{
    
    public void run(){
        System.out.println("小车正在跑。。");
    }
}
/**
 * 汽车工厂
 *
 */
class CarFactory{
    //加上static方便调用,也称静态工厂
    public static Car createCar(){
        return new Car();
    }
    
}

public class SampleFactoryTest {

    public static void main(String[] args) {
        //通过工厂创建一个Car
        Car car = CarFactory.createCar();
        //调用者调用run方法
        car.run();
    }
}

实际应用当然不止才一个类型的车,下面是一个详细的例子:


interface Car{
    
    public void run();
}

class Benz implements Car{

    @Override
    public void run() {
        System.out.println("奔驰在跑...");
    }
    
}

class Bmw implements Car{

    @Override
    public void run() {
        System.out.println("宝马在跑...");
    }
    
}
/**
 * 汽车工厂
 *
 */
class CarFactory{
    /**
     * 简单工厂一般加上static方便访问
     * 通过不同类型获得不同的车
     * @param type 类型
     * @return 车
     */
    public static Car createCar(String type){
        Car car = null;
        if(type.equals("benz")){
            car = new Benz();
        } else if(type.equals("bmw")){
            car = new Bmw();
        }
        return car;
    }
    
}
/**
 * 也可以为每一种汽车写一个单独的方法
 */
class CarFactory2{
    /**
     * 简单工厂一般加上static方便访问
     * 通过不同类型获得不同的车
     * @param type 类型
     * @return 车
     */
    public static Car createBenz(){
        return new Benz();
    }
    
    public static Car createBmw(){
        return new Bmw();
    }
    
}

public class SampleFactoryTest {

    public static void main(String[] args) {
        //通过工厂创建一个Benz
        //Car benz = CarFactory.createCar("benz");
        //Car bmw = CarFactory.createCar("bmw");
        Car benz = CarFactory2.createBenz();
        Car bmw = CarFactory2.createBmw();
        //调用者调用run方法
        benz.run();
        bmw.run();
    }
}

到这里一个简单工厂的实现已经完成,但是现在会有一个新的问题,当你要新增Car的时候,势必要去修改工厂方法来适应新的需求,这样便破坏了Open-closed Principle,下面是修改后的:

interface Car{
    
    public void run();
}

class Benz implements Car{

    @Override
    public void run() {
        System.out.println("奔驰在跑...");
    }
    
}

class Bmw implements Car{

    @Override
    public void run() {
        System.out.println("宝马在跑...");
    }
    
}
/**
 * 将工厂抽象为接口
 *
 */
interface CarFactory{
    Car createCar();
}
/**
 * 奔驰工厂
 *
 */
class BenzFactory implements CarFactory{

    @Override
    public Car createCar() {
        return new Benz();
    }
    
}

/**
 * 宝马工厂
 *
 */
class BmwFactory implements CarFactory{

    @Override
    public Car createCar() {
        return new Bmw();
    }
    
}


public class SampleFactoryTest {

    public static void main(String[] args) {
        
        //通过工厂创建对象
        Car benz = new BenzFactory().createCar();
        Car bmw = new BmwFactory().createCar();
        //调用者调用run方法
        benz.run();
        bmw.run();
    }
}

以上就是工厂方法模式,和简单工厂略有不同,通过抽象工厂为接口解决了OCP,现在的这个工厂变得更好扩展了,但其实这种写法复杂了很多,还是看你怎么取舍了吧。

相关文章

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • 设计模式之工厂模式

    设计模式之工厂模式 标签(空格分隔): 设计模式 工厂模式 设计模式的感念 设计模式的应用 工厂设计模式的产生 工...

  • 设计模式三、工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 工厂模式 在一...

  • 工厂模式

    java设计模式-工厂模式 工厂模式: 工厂模式是java设计模式里最常用的设计模式之一。 工厂模式属于创建型模式...

  • 单件设计模式

    一、定义 设计模式 设计模式就是一种更好的编写代码方案。 常见设计模式 工厂设计模式、抽象工厂设计模式、抽象工厂设...

  • iOS设计模式(三)之抽象工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(一)之简单工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(二)之工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • 设计模式一、单例模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 简单单例(推荐...

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

网友评论

    本文标题:工厂设计模式

    本文链接:https://www.haomeiwen.com/subject/iiwovttx.html