设计模式--简单工厂&工厂方法

简单工厂模式:

有的对象属性过多,创建该对象时可能写大量的setter(),而其他类要使用此类时,不得不重复写以上大量的代码。

优点:最大的优点在于实现对象的创建和对象的使用分离,将复杂的对象创建交给专门的工厂类负责。

缺点:工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码将会非常复杂。

car抽象父类

public abstract class Car {

    public void run(){};
}

子类:

public class BWM extends Car {
    @Override
    public void run() {
        System.out.println("BMW");
    }
}
public class GT extends Car{
    @Override
    public void run() {
        System.out.println("ford GT");
    }
}

工厂类:

public class Factory {
    public static Car getCar(String type){
        if ("BWM".equals(type)){
            return new BWM();
        }else if("GT".equals(type)){
            return new GT();
        }
        return null;
    }
}

客户类:

public class Client {
    public static void main(String[] args) {
        Car gt = Factory.getCar("GT");
        gt.run();
    }
}

工厂方法模式:

好处:创建具体产品实例的工作延迟到其工厂子类去完成,当系统需要新增一个产品是,无需修改现有系统代码,只需要添加一个具体产品类其对应的工厂子类,使系统的扩展性变得很好,符合面向对象编程的开闭原则。

坏处:增加了编码难度,大量增加了类的数量,所以怎么选择还是看实际的需求。

工厂接口:

public interface Factory {
    Car create();
}

车型工厂类:

public class GTFactory implements Factory{
    @Override
    public Car create() {
    //★★★中间省略一万行代码
        return new GT();
    }
}
public class BWMFactory implements Factory {

    @Override
    public Car create() {
    //★★★中间省略一万行代码
        return new BWM();
    }
}

car抽象父类:

public abstract class Car {

    public void run(){};
}

具体car子类:

public class GT extends Car{
    @Override
    public void run() {
        System.out.println("ford GT");
    }
}
public class BWM extends Car{
    @Override
    public void run() {
        System.out.println("bwm");
    }
}

客户:

public class Client {
    public static void main(String[] args) {
        GTFactory gtFactory = new GTFactory();
        Car gt = gtFactory.create();
        gt.run();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值