设计模式:创建型模式

#####简单工厂模式 -> 工厂方法模式

简单工程模式:又称为静态工厂模式。

包含三个角色:工厂角色负责实现创建所有实例的内部逻辑;抽象产品角色是所创建的所有对象的父类,负责描述所有实例的共有的公共接口;具体产品角色是创建目标,所有的创建对象都充当这个角色的具体类的实例。

```

// 抽象产品类

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();

}

}

```

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP