设计模式二之工厂模式

工厂模式可以分为

简单工厂模式(也叫静态工厂模式),工厂方法模式,抽象工厂模式

1,不使用任何工厂模式,直接调用类的构造函数创建实例,缺点是耦合度太高

/**
不使用工厂模式,直接调用类的构造函数
*/
public interface Car {
    void make();
}
public class Benz implements Car{
    public Benz() {
        make();
    }
    @Override
    public void make() {
        System.out.println("make Benz");
    }
}
public class Bmw implements Car{
    public Bmw() {
        make();
    }
    @Override
    public void make() {
        System.out.println("make Bmw");
    }
}
public class Client {
    public static void main(String[] args) {
        new Benz();
        new Bmw();
    }
}

2.使用简单工厂模式(静态工厂模式),就是将创建实例的过程交给工厂,只需要告诉工厂需要什么产品,就可以得到对应的实例了。缺点是,如果需要添加新的产品,那工厂类的代码就需要跟着更改。

public interface Car {
    void make();
}
public class Benz implements Car{
    public Benz() {
        make();
    }
    @Override
    public void make() {
        System.out.println("make Benz");
    }
}
public class Bmw implements Car{
    public Bmw() {
        make();
    }
    @Override
    public void make() {
        System.out.println("make Bmw");
    }
}
public class SimpleFactory {
    public static void make(String band){
        if ("Benz".equals(band)){
            new Benz();
        }else if ("Bmw".equals(band)){
            new Bmw();
        }
    }
}
public class Client {
    public static void main(String[] args) {
        SimpleFactory.make("Benz");
        SimpleFactory.make("Bmw");
    }
}

3.工厂方法模式,就是在工厂层面也抽象一层。缺点是,如果增加了新的产品,也必须跟着增加新的工厂类。

public interface Car {
    void make();
}
public class Benz implements Car{
    public Benz() {
        make();
    }
    @Override
    public void make() {
        System.out.println("make Benz");
    }
}
public class Bmw implements Car{
    public Bmw() {
        make();
    }
    @Override
    public void make() {
        System.out.println("make Bmw");
    }
}
public interface FactoryMethod {
    void make();
}
public class BenzFactory implements FactoryMethod{
    @Override
    public void make() {
        new Benz();
    }
}
public class BwmFactory implements FactoryMethod{
    @Override
    public void make() {
        new Bmw();
    }
}
public class Client {
    public static void main(String[] args) {
        FactoryMethod f = new BenzFactory();
        f.make();
        f = new BwmFactory();
        f.make();
    }
}

4.抽象工厂模式,简单的理解就是,一个具体生产对象的工厂,可以生产多种产品。而上面的工厂方法,一次只能生产一种产品。也可以理解成工厂方法和简单工厂的结合,首先是在工厂层面进行抽象,生产产品的过程由具体的工厂完成,其次,每个具体的工厂可以根据需求生产不同的产品。

public interface Car {
    void make();
}
public interface Bike {
    void make();
}
public class Benz implements Car{
    public Benz() {
        make();
    }
    @Override
    public void make() {
        System.out.println("make Benz");
    }
}
public class Bmw implements Car{
    public Bmw() {
        make();
    }
    @Override
    public void make() {
        System.out.println("make Bmw");
    }
}
public class BenzBike implements Bike{
    public BenzBike() {
        make();
    }
    @Override
    public void make() {
        System.out.println("make BenzBike");
    }
}
public class BmwBike implements Bike{
    public BmwBike() {
        make();
    }
    @Override
    public void make() {
        System.out.println("make BmwBike");
    }
}
public interface AbsFactory {
    void make();
    void makeBike();
}
public class BenzFactory implements AbsFactory{
    @Override
    public void make() {
        new Benz();
    }
    @Override
    public void makeBike() {
        new BenzBike();
    }
}
public class BwmFactory implements AbsFactory{
    @Override
    public void make() {
        new Bmw();
    }
    @Override
    public void makeBike() {
        new BmwBike();
    }
}
public class Client {
    public static void main(String[] args) {
        AbsFactory a = new BenzFactory();
        a.make();
        a.makeBike();
        a = new BwmFactory();
        a.make();
        a.makeBike();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值