设计模式:创建型模式
#####简单工厂模式 -> 工厂方法模式
简单工程模式:又称为静态工厂模式。
包含三个角色:工厂角色负责实现创建所有实例的内部逻辑;抽象产品角色是所创建的所有对象的父类,负责描述所有实例的共有的公共接口;具体产品角色是创建目标,所有的创建对象都充当这个角色的具体类的实例。
```
// 抽象产品类
public interface TV {
public void play();
}
```
```
// 具体产品类Haier
public class HaierTV implements TV {
@Override
public void play() {
System.out.println("海尔电视播放中...");
}
}
```
```
// 具体产品类Haier
public class HisenseTV implements TV {
@Override
public void play() {
System.out.println("海信电视机播放中...");
}
}
```
```
// 工厂类
public class TVFactory {
public static TV produceTV(String brand) throws Exception {
if (brand.equalsIgnoreCase("Haier")){
System.out.println("电视机工厂生产海尔电视机!");
return new HaierTV();
}else if(brand.equalsIgnoreCase("Hisense")){
System.out.println("电视机工厂生产海信电视机!");
return new HisenseTV();
}else {
throw new Exception("对不起,暂时不能生产该品牌电视机");
}
}
}
```
```
// 测试类
public class SimplefactoryClient {
public static void main(String[] args) {
try {
// 随机获取一个品牌名
String brandName = XMLUtilTv.getBrandName((int) (Math.random()*3),"src/resource/configTV.xml");
// 根据品牌名获取产品对象
TV tv = TVFactory.produceTV(brandName);
tv.play();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
```
***
工厂方法模式:是对简单工厂模式的进一步抽象和推广,克服了简单工厂模式的不够灵活,在增加新的产品时需要改工厂类的判断逻辑,修改代码的违反开闭原则的缺点。
工厂类不在负责所有产品的创建,而是将具体创建工作交给子类去做。
```
public interface TVFactory {
public TV produceTV();
}
```
```
public class HaierTVFactory implements TVFactory {
@Override
public TV produceTV() {
System.out.println("电视机工厂生产海尔电视机!");
return new HaierTV();
}
}
```
```
public class HisenseTVFactory implements TVFactory {
@Override
public TV produceTV() {
System.out.println("电视机工厂生产海信电视机!");
return new HaierTV();
}
}
```
