23种设计模式——抽象工厂模式
-
定义:抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定他们具体的类
-
适用场景
- 客户端(应用层)不依赖与产品类实例如何创建、实现细节
- 强调一系列相关的产品对象(属于同一产品簇)一起使用创建对象需要大量的重复代码
- 提供一个产品类的库,所有的产品一同样的接口实现,从而使得客户端不依赖于具体的实现
-
优点
- 具体茶农在应用层的代码隔离,无需关心创建细节
- 将一个系列的产品统一到一起创建
-
缺点
- 规定了所有可能被创建的产品集合,产品簇中扩展新的产品困难
- 增加了系统的抽象性和理解难度
1)首先创建一个超级工厂,里面有两个产品(电话和路由)
package com.mjh.chouxaingfactory;
public interface IproductFactory {
IPhonProduct iPhonProduct();
IRouterProduct iRouterProduct();
}
2)分别创建电话产品和路由产品接口
package com.mjh.chouxaingfactory;
public interface IPhonProduct {
void start();
void shoutDown();
void callUp();
void sendMS();
}
package com.mjh.chouxaingfactory;
public interface IRouterProduct {
void start();
void shoutDown();
void openWIFI();
void setting();
}
3)根据超级工厂实现小米系列的功能(小米电话和小米路由)
package com.mjh.chouxaingfactory;
public class XiaoMiProduct implements IproductFactory {
@Override
public IPhonProduct iPhonProduct() {
return new XiaoMIPhone();
}
@Override
public IRouterProduct iRouterProduct() {
return new XiaoMiRouter();
}
}
4)依次实现小米电话的具体功能和小米路由的具体功能
package com.mjh.chouxaingfactory;
public class XiaoMIPhone implements IPhonProduct {
@Override
public void start() {
System.out.println("小米开机");
}
@Override
public void shoutDown() {
System.out.println("小米关机");
}
@Override
public void callUp() {
System.out.println("小米打电话");
}
@Override
public void sendMS() {
System.out.println("小米发信息");
}
}
package com.mjh.chouxaingfactory;
public class XiaoMiRouter implements IRouterProduct {
@Override
public void start() {
System.out.println("小米打开路由");
}
@Override
public void shoutDown() {
System.out.println("小米关闭路由");
}
@Override
public void openWIFI() {
System.out.println("小米打开WIFI");
}
@Override
public void setting() {
System.out.println("小米打开设置");
}
}
5)测试
public class Client {
public static void main(String[] args) {
System.out.println("=================小米系列===============");
XiaoMiProduct xiaoMiProduct = new XiaoMiProduct();
IPhonProduct iPhonProduct = xiaoMiProduct.iPhonProduct();
iPhonProduct.start();
iPhonProduct.callUp();
iPhonProduct.sendMS();
XiaoMiRouter xiaoMiRouter = new XiaoMiRouter();
xiaoMiRouter.openWIFI();
xiaoMiRouter.setting();