工厂模式

简介

工厂模式是创建型设计模式的一种。可以分成简单工厂模式、工厂方法模式、抽象方法模式,其主要作用就是将对象的实例创建抽取到工厂类中,使用者在获取对象时,只需要通过工厂去获取对象实例即可,降低系统间的耦合性。

实现

简单工厂模式

产品代码:

// 产品接口:形状
 public interface Shape {
    void show();
}

// 产品1:圆形
public class Circle implements Shape {
    @Override
    public void show() {
        System.out.println("这是圆形");
    }
}

//产品2:矩形
public class Rectangle implements Shape {
    @Override
    public void show() {
        System.out.println("这是矩形");
    }
}

工厂代码:

public class SimpleFactory {

    public static Shape getShape(String type) {
        Shape shape = null;
        switch(type) {
            case "circle":
                shape = new Circle();
                break;
            case "rectangle":
                shape = new Rectangle();
                break;
        }
        return shape;
    }
}

获取产品:

public class FactoryTest {
    public static void main(String[] args) {
        Shape shape = SimpleFactory.getShape("circle");
        shape.show();
    }
}

上面代码可以看到,在使用产品时并不需要使用者与产品耦合,使用者只与工厂类进行依赖,产品的获取完全通过工厂去实现。当我们新加一个同类产品时,只需要多写一个实现类,同时修改工厂类里面的内容,使用者完全不需要进行任何修改。由于简单工厂模式获取产品的方法一般都是静态的,所以简单工厂模式也称为静态工厂模式。

工厂方法模式

产品代码:

// 产品接口:形状
 public interface Shape {
    void show();
}

// 产品1:圆形
public class Circle implements Shape {
    @Override
    public void show() {
        System.out.println("这是圆形");
    }
}

//产品2:矩形
public class Rectangle implements Shape {
    @Override
    public void show() {
        System.out.println("这是矩形");
    }
}

工厂代码:

// 抽象工厂接口:提供一个方法去获取对象
public interface FactoryMothod {
    Shape createInstance();
}

// 实现类重写去获取需要的产品
public class CircleFactory implements FactoryMothod {
    @Override
    public Shape createInstance() {
        return new Circle();
    }
}

public class RectangleFactory implements FactoryMothod {
    @Override
    public Shape createInstance() {
        return new Rectangle();
    }
}

获取产品:

public class FactoryTest {
    public static void main(String[] args) {
        CircleFactory circleFactory = new CircleFactory();
        Shape shape = circleFactory.createInstance();
    }
}

与简单工厂模式对比,工厂方法模式是通过一个接口(抽象类)里面定义一个方法去获取对象,当有同类产品新加时,我们不再需要去修改工厂里面的代码,只需要添加一个对象的实现工厂类去获取实例即可。

抽象工厂模式

产品代码1:

public interface Clothes {
    void make();
}

public class BJClothes implements Clothes {
    @Override
    public void make() {
        System.out.println("北京制造的衣服");
    }
}

public class SZClothes implements Clothes {
    @Override
    public void make() {
        System.out.println("这是深圳制造的衣服");
    }
}

产品代码2:

public interface Shoes {
    void makeShoes();
}

public class BJShoes implements Shoes {
    @Override
    public void makeShoes() {
        System.out.println("这是北京制造的鞋子");
    }
}

public class SZShoes implements Shoes {
    @Override
    public void makeShoes() {
        System.out.println("这是深圳制造的鞋子");
    }
}

工厂代码:

public interface AbstractFactory {
    Clothes getClothes();
    Shoes getShoes();
}

public class BJFactory implements AbstractFactory {
    @Override
    public Clothes getClothes() {
        return new BJClothes();
    }

    @Override
    public Shoes getShoes() {
        return new BJShoes();
    }
}

public class SZFactory implements AbstractFactory {
    @Override
    public Clothes getClothes() {
        return new SZClothes();
    }

    @Override
    public Shoes getShoes() {
        return new SZShoes();
    }
}

对比与工厂方法模式,抽象工厂模式为创建一组相关或相互依赖的对象提供一个接口。形象的说就是不再是一个产品,他针对的是多个产品的管理,并且多个产品之间有一定的关联性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值