设计模式(二)——工厂方法

简单工厂有一个问题就是增加产品类型时违背了开闭原则,工厂方法解决了这一问题。工厂方法包含四个部分:抽象产品,具体产品,抽象工厂,具体工厂。
工厂方法的技术核心是多态,通过多态的使用,工厂方法保留了简单工厂的优点,解决了它的缺点。工厂方法的核心是一个抽象工厂类,而简单的工厂模式将核心放在了具体类上。对比可以发现如果简单工厂需要增加一个新的产品类时,必须要改变整个工厂类,这样就不符合开闭原则了。而工厂方法在增加一个产品类时,只需要具体工厂和产品类,原有的工厂对象不要改变,原有的客户端也不用改变,这就很好的满足了开闭原则。

//抽象产品
public interface TV {
    public void play();
}
//具体产品
public class HaierTV implements TV {

    @Override
    public void play() {
        // TODO Auto-generated method stub
        System.out.println("海尔电视播放中");
    }
}
public class HisenseTV implements TV {

    @Override
    public void play() {
        // TODO Auto-generated method stub
        System.out.println("海信电视播放中");
    }
}
//抽象工厂
public interface TVFactory {
    public TV produceTV();
}
public class HisenseTVFactory implements TVFactory {

    @Override
    public TV produceTV() {
        // TODO Auto-generated method stub
        System.out.println("海信工厂生产海信电视");
        return new HisenseTV();
    }

}
public class HaierTVFactory implements TVFactory {

    @Override
    public TV produceTV() {
        // TODO Auto-generated method stub
        System.out.println("海尔工厂生产海尔电视");
        return new HaierTV();
    }

}

工厂方法的优点:
(1)与简单工厂方法一样,工厂方法隐藏了具体产品被实例化的过程,用户只需要知道所需产品对应的工厂,无须知道创建细节。
(2)工厂角色和产品角色的多态性设计是工厂模式的关键,他使得工厂可以自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂的内部。所有具体工厂都是继承自同一个抽象父类。
(3)使用工厂模式可以很好地符合开闭原则。
工厂方法的缺点:
(1)一个产品类将对应一个工厂类,这样类的个数将成倍增加,增加了维护难度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值