设计模式--工厂方法模式

工厂方法模式,每种类型的汽车都有自己的工厂,可以横向扩展,实现了开闭原则。

public interface CarFactory {
  public  Car  makeCar();
}
public class BaoMaFactory implements CarFactory{
     @Override
    public Car makeCar() {
        return new BaoMaCar();
    }
}
public class BenChiFactory implements CarFactory{
    @Override
    public Car makeCar() {
        return new BenChiCar();
    }
}
public interface Car {
    public void make();
}
public class BaoMaCar implements Car{
    @Override
    public void make() {
        System.out.println("正在制造宝马~");
    }
}
public class BenChiCar implements Car{
    @Override
    public void make() {
        System.out.println("正在制造奔驰~");
    }
}
public class Demo {
    public static void main(String[] args) {
        CarFactory benChiFactory = new BenChiFactory();
        benChiFactory.makeCar().make();
        CarFactory baoMaFactory = new BaoMaFactory();
        baoMaFactory.makeCar().make();
    }
}

运行结果:

正在制造奔驰~
正在制造宝马~

优点:

1、下次加入大众车,只需要新建一个 DazhongFactory(大众的工厂)就行,不会影响到别的工厂。

2、可以避免创建者和具体产品之间的紧密耦合。

3、单一职责原则。 你可以将产品创建代码放在程序的单一位置,从而使得代码更容易维护。

4、开闭原则。 无需更改现有客户端代码,就可以在程序中引入新的产品类型。

缺点:

代码量加大,管理复杂,结构复杂,实际业务一般使用简单工厂模式。

三、工厂方法模式适合应用场景

核心Java程序库中有该模式的应用:

java.util.Calendar#getInstance()

java.util.ResourceBundle#getBundle()

java.text.NumberFormat#getInstance()

java.nio.charset.Charset#forName()

java.net.URLStreamHandlerFactory#createURLStreamHandler(String)

(根据协议返回不同的单例对象)

java.util.EnumSet#of()

javax.xml.bind.JAXBContext#createMarshaller() 及其他类似的方法。

识别方法: 工厂方法可通过构建方法来识别,它会创建具体类的对象,但以抽象类型或接口的形式返回

这些对象。

总结

不一定要符合设计原则,要根据实际情况加以分析取舍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值