抽象工厂模式
-
定义
- 抽象工程模式提供了一个创建一系列或者相互依赖对象的接口,无需指定它们具体的类。
-
适用场景
- 客户端(应用层)不依赖于产品类实例如何被创建、实现细节。
- 强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量的重复代码。
- 提供一个产品类的库,所有的产品以同样的接口出现,从而使得客户端不依赖于具体的实现。
-
优点:
- 具体产品在应用层的代码隔离,无需关心创建的细节。
- 将一个系列的产品统一到一起创建。
-
缺点:
- 规定了所有可能被创建的产品集合,产品簇中扩展新的产品困难。
- 增加了系统的抽象性和理解难度。
创建手机产品接口:
//手机产品接口
public interface IPhoneProduct {
void start();
void shutdown();
void callup();
void sendMS();
}
创建路由器产品接口:
//路由器产品接口
public interface IRouterProduct {
void start();
void shutdown();
void openwifi();
void setting();
}
创建华为手机:
public class HuaWeiPhone implements IPhoneProduct{
@Override
public void start() {
System.out.println("打开华为手机");
}
@Override
public void shutdown() {
System.out.println("关闭华为手机");
}
@Override
public void callup() {
System.out.println("华为手机打电话");
}
@Override
public void sendMS() {
System.out.println("华为手机发短信");
}
}
创建小米手机:
public class XiaoMiPhone implements IPhoneProduct{
@Override
public void start() {
System.out.println("开启小米手机");
}
@Override
public void shutdown() {
System.out.println("关闭手机");
}
@Override
public void callup() {
System.out.println("小米打电话");
}
@Override
public void sendMS() {
System.out.println("小米发短信");
}
}
创建华为路由器:
public class HuaWeiRouter implements IRouterProduct{
@Override
public void start() {
System.out.println("打开华为路由器");
}
@Override
public void shutdown() {
System.out.println("关闭华为路由器");
}
@Override
public void openwifi() {
System.out.println("华为路由器打开wifi");
}
@Override
public void setting() {
System.out.println("华为路由器设置");
}
}
创建小米路由器:
public class XiaoMiRouter implements IRouterProduct{
@Override
public void start() {
System.out.println("打开小米路由器");
}
@Override
public void shutdown() {
System.out.println("关闭小米路由器");
}
@Override
public void openwifi() {
System.out.println("小米路由器打开wifi");
}
@Override
public void setting() {
System.out.println("小米路由器设置");
}
}
创建产品工厂:
//抽象产品工厂
public interface IProductFactory {
//生产手机
IPhoneProduct iphoneProduct();
//生产路由器
IRouterProduct irouterProduct();
}
创建华为产品工厂:
public class HuaWeiFactory implements IProductFactory {
@Override
public IPhoneProduct iphoneProduct() {
return new HuaWeiPhone();
}
@Override
public IRouterProduct irouterProduct() {
return new HuaWeiRouter();
}
}
创建小米产品工厂:
public class XiaoMiFactory implements IProductFactory{
@Override
public IPhoneProduct iphoneProduct() {
return new XiaoMiPhone();
}
@Override
public IRouterProduct irouterProduct() {
return new XiaoMiRouter();
}
}
创建消费者:
public class Client {
public static void main(String[] args) {
System.out.println("****小米系列产品");
//小米工厂
XiaoMiFactory xiaoMiFactory = new XiaoMiFactory();
IPhoneProduct iPhoneProduct = xiaoMiFactory.iphoneProduct();
iPhoneProduct.callup();
IRouterProduct iRouterProduct = xiaoMiFactory.irouterProduct();
iRouterProduct.openwifi();
System.out.println("****华为系列产品");
HuaWeiFactory huaWeiFactory = new HuaWeiFactory();
IPhoneProduct iPhoneProduct1 = huaWeiFactory.iphoneProduct();
iPhoneProduct1.callup();
IRouterProduct iRouterProduct1 = huaWeiFactory.irouterProduct();
iRouterProduct1.openwifi();
}
}
相应类图: