JAVA设计模式-入门版学习攻略-工厂方法以及抽象工厂

2019-03-27  本文已影响0人  林亚希

工厂方法模式

描述

定义一个穿件对象的工厂接口,让子类决定实例化哪一个类。

关键点

优点

  1. 符合开-闭原则:新增一种产品,只需增加具体产品类和相对应的工厂子类就可以

缺点

新增一种产品需要增加一个产品类和一个具体的子工厂,增加系统负担。

代码实现

1.抽象工厂类角色

public interface CarFactory_m {
    
    public Car_m pruduct();
}
  1. 具体工厂角色
public class AodiFactory_m implements CarFactory_m{
    public Car_m pruduct() {
        return new AodiCar_m();
    }
}
public class BmwFactory_m implements CarFactory_m{
    public Car_m pruduct() {
        return new BmwCar_m();
    }
}

3.抽象产品角色

//抽象类
public interface Car_m {

    //生产车
    public void create();
}

4.具体产品角色

public class BmwCar_m implements Car_m {
    public void create() {
        System.out.println("生产宝马汽车!!!");
    }
}

public class AodiCar_m implements Car_m {
    public void create() {
        System.out.println("生产奥迪汽车!!!");
    }
}

跟简单工厂的区别

2个有没优劣之分,只有适合以及不适合。工厂方法的代码就是在简单工厂的基础上再定义了一个工厂的接口,优点很明显。当我们需要增加一种产品的时候,比如增加奔驰汽车。工厂方法的设计模式可以不修改原来代码的基础上,增加1个工厂具体角色,1个具体产品角色就可以。但是简单工厂必须在工厂类上增加业务逻辑。违背了开-闭原则。但是缺点也是很明显,当产品越多时,类会多出很多。

抽象工厂模式

描述

给客户提供一个接口,负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

关键点

优点

当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

缺点

产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。

代码实现

1.抽象工厂类角色

public interface Factory_a {

    //生成汽车
    public Car_a pruductCar();

    //生产飞机
    public Plane_a pruductPlane();
}
  1. 具体工厂角色
public class AodiFactory_a implements Factory_a {
    public Car_a pruductCar() {
        return new AodiCar_a();
    }

    public Plane_a pruductPlane() {
        return new AodiPlane_a();
    }
}
public class BmwFactory_a implements Factory_a {

    public Car_a pruductCar() {
        return new BmwCar_a();
    }

    public Plane_a pruductPlane() {
        return new BmwPlane_a();
    }
}

3.抽象产品角色

//抽象类
public interface Car_m {

    //生产车
    public void create();
}

//抽象类
public interface Plane_a {

    //生产飞机
    public void create();
}

4.具体产品角色

public class BmwCar_m implements Car_m {
    public void create() {
        System.out.println("生产宝马汽车!!!");
    }
}

public class AodiCar_m implements Car_m {
    public void create() {
        System.out.println("生产奥迪汽车!!!");
    }
}
public class AodiPlane_a implements Plane_a {
    public void create() {
        System.out.println("生产奥迪飞机!!!");
    }
}
public class BmwPlane_a implements Plane_a {
    public void create() {
        System.out.println("生产宝马飞机!!!");
    }
}

对比工厂方法

抽象方法就是工厂方法的延伸版,可以称之为超级工厂。解决工厂方法中层级单一的问题。

总结

简单工厂模式,工厂方法模式,抽象工厂,都是工厂模式。最终目的就是为了解耦。

上一篇下一篇

猜你喜欢

热点阅读