一、简单工厂模式
注意: 简单工厂实际上不算设计模式中的一种
角色: 抽象产品角色、具体产品角色AB等、唯一的一个工厂(通过传递一个参数给工厂,返回具体的产品)
缺点: 只有一个工厂,其职责过重
实例: 电视
================================1、抽象产品=================================
// 抽象产品(可以是抽象类或者接口)
public abstract class TV {
public abstract void play();
}
================================2、具体产品=================================
// 具体产品A
public class HaierTV extends TV {
@Override
public void play() {
System.out.println("HaierTV is playing.");
}
}
// 具体产品B
public class HisenseTV extends TV {
@Override
public void play() {
System.out.println("HisenseTV is playing.");
}
}
================================3、工厂=================================
// 唯一的工厂(根据参数,生产具体的产品)
public class TVFactory {
public static TV productTV(String brand) {
TV tv = null;
switch (brand) {
case "HaierTV":
tv = new HaierTV();
break;
case "HisenseTV":
tv = new HisenseTV();
break;
}
return tv;
}
}
================================客户端类=================================
public class Main {
public static void main(String[] args) {
TV haierTV = TVFactory.productTV("HaierTV");
haierTV.play();
TV hisenseTV = TVFactory.productTV("HisenseTV");
hisenseTV.play();
}
}
>>>>>> HaierTV is playing.
>>>>>> HisenseTV is playing.
二、工厂方法
角色: 抽象产品角色、具体产品角色AB等、抽象工厂角色、具体工厂角色AB
区别于简单工厂模式: 每个产品由该产品具体的工厂生产,避工厂职责过重
实例: 电视
================================1、抽象产品=================================
// 抽象产品(可以是抽象类或者接口)
public abstract class TV {
public abstract void play();
}
================================2、具体产品=================================
// 具体产品A
public class HaierTV extends TV {
@Override
public void play() {
System.out.println("HaierTV is playing.");
}
}
// 具体产品B
public class HisenseTV extends TV {
@Override
public void play() {
System.out.println("HisenseTV is playing.");
}
}
================================3、抽象工厂=================================
// 抽象工厂
public abstract class TVFactory {
public abstract TV productTV();
}
================================4、具体工厂=================================
// 具体工厂A
public class HaierTVFactory extends TVFactory {
@Override
public TV productTV() {
return new HaierTV();
}
}
// 具体工厂B
public class HisenseTVFactory extends TVFactory {
@Override
public TV productTV() {
return new HisenseTV();
}
}
================================客户端类=================================
public class Main {
public static void main(String[] args) {
TVFactory haierTVFactory = new HaierTVFactory();
TV haierTV = haierTVFactory.productTV();
haierTV.play();
TVFactory hisenseTVFactory = new HaierTVFactory();
TV hisenseTV = hisenseTVFactory.productTV();
hisenseTV.play();
}
}
>>>>>> HaierTV is playing.
>>>>>> HisenseTV is playing.