抽象工厂模式:围绕一个超级工厂创建其他工厂,然后工厂又可以创建一系列产品。抽象工厂模式不可以增加产品,但是能增加产品族
适用场景:
1、客户端(应用层)不依赖于产品类如何被创建和实现等细节
2、强调一系列相关的产品对象(比如 小米品牌的各种产品) 一起使用创建对象需要大量的重复代码
3、提供一个产品类的库,所有的产品以同样的接口出现,从而使得客户端不依赖于具体的实现。
①创建一个手机接口 , 创建一个路由器接口(相当于两个产品)
public interface Iphone {
void start();//开机
void shutdown();//关机
void sendMsg();//发短信
}
public interface Irouter {
void start();//开机
void shutDown();//关机
}
②创建一个小米手机和小米路由器,创建一个华为手机和华为路由器
public class XiaomiIphone implements Iphone {
@Override
public void start() {
System.out.println("小米手机开机");
}
@Override
public void shutdown() {
System.out.println("小米手机关机");
}
@Override
public void sendMsg() {
System.out.println("小米手机发短信");
}
}
public class XiaomiIrouter implements Irouter {
@Override
public void start() {
System.out.println("小米路由器开机");
}
@Override
public void shutDown() {
System.out.println("小米路由器关机");
}
}
public class HuaweiIphone implements Iphone {
@Override
public void start() {
System.out.println("华为手机开机");
}
@Override
public void shutdown() {
System.out.println("华为手机关机");
}
@Override
public void sendMsg() {
System.out.println("华为手机发送短信");
}
}
public class HuaweiIrouter implements Irouter {
@Override
public void start() {
System.out.println("华为路由器开机");
}
@Override
public void shutDown() {
System.out.println("华为路由器关机");
}
}
③创建一个工厂(这个工厂则为超级工厂)
public interface IProductFactory {
Iphone iphone();
Irouter irouter();
}
④现在则可创建具体的品牌的工厂了 创建一个小米工厂和华为工厂
public class XiaomiFactory implements IProductFactory {
@Override
public Iphone iphone() {
return new XiaomiIphone();
}
@Override
public Irouter irouter() {
return new XiaomiIrouter();
}
}
public class HuaweiFactory implements IProductFactory {
@Override
public Iphone iphone() {
return new HuaweiIphone();
}
@Override
public Irouter irouter() {
return new HuaweiIrouter();
}
}
⑤创建一个客户端 通过工厂拿到具体系列的产品
public class Client {
public static void main(String[] args) {
System.out.println("================华为系列产品================");
HuaweiFactory huaweiFactory = new HuaweiFactory();
Iphone huaweiIphone = huaweiFactory.iphone();
Irouter huaweiIrouter = huaweiFactory.irouter();
huaweiIphone.sendMsg();
huaweiIrouter.start();
System.out.println("================小米系列产品================");
XiaomiFactory xiaomiFactory = new XiaomiFactory();
Iphone xiaomiIphone = xiaomiFactory.iphone();
Irouter xiaomiIrouter = xiaomiFactory.irouter();
xiaomiIphone.sendMsg();
xiaomiIrouter.start();
}
}
一个工厂 生产一系列产品
优点:
1、具体产品在应用层代码隔离,无需关心创建的细节
2、将一个系列的产品统一到一起创建
缺点:
1、规定了所有可能为创建的产品集合,产品簇中扩展新的产品困难
2、增加了系统的抽象性和理解难度
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)