抽象工厂模式
抽象工厂模式,围绕一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂。
适用场景
1、客户端(应用层)不依赖于产品实例创建、实现等细节
2、强调一系列相关的产品(属于同一产品族)
3、提供一个产品类的库
优缺点:
优点:
◇具体产品在应用层的代码隔离,无需关心创建细节
◇将一个系列产品统一到一起创建
缺点:
◇产品簇中扩展新的产品困难
◇增加系统的抽象性和理解难度
代码示例
定义接口
package Factory.abstractfactory;
public interface IphoneProduct {
void start();
void shutdown();
void call();
}
=================================================
package Factory.abstractfactory;
public interface RootProduct {
void send();
void accept();
void setting();
}
创建对象
package Factory.abstractfactory;
public class XiaoMi implements IphoneProduct{
@Override
public void start() {
// TODO Auto-generated method stub
System.out.println("小米开机");
}
@Override
public void shutdown() {
// TODO Auto-generated method stub
System.out.println("小米关机");
}
@Override
public void call() {
// TODO Auto-generated method stub
System.out.println("小米打电话");
}
}
====================================================
package Factory.abstractfactory;
public class HuaWei implements IphoneProduct{
@Override
public void start() {
// TODO Auto-generated method stub
System.out.println("华为开机");
}
@Override
public void shutdown() {
// TODO Auto-generated method stub
System.out.println("华为关机");
}
@Override
public void call() {
// TODO Auto-generated method stub
System.out.println("华为打电话");
}
}
==================================================
package Factory.abstractfactory;
public class HuaWeiRoot implements RootProduct{
@Override
public void send() {
// TODO Auto-generated method stub
System.out.println("华为路由发送");
}
@Override
public void accept() {
// TODO Auto-generated method stub
System.out.println("华为路由接收");
}
@Override
public void setting() {
// TODO Auto-generated method stub
System.out.println("华为路由设置");
}
}
======================================================
package Factory.abstractfactory;
public class XiaoMiRoot implements RootProduct{
@Override
public void send() {
// TODO Auto-generated method stub
System.out.println("小米路由发送");
}
@Override
public void accept() {
// TODO Auto-generated method stub
System.out.println("小米路由接收");
}
@Override
public void setting() {
// TODO Auto-generated method stub
System.out.println("小米路由设置");
}
}
创建生产产品的工厂
package Factory.abstractfactory;
public class xiaomifactory implements ProductFactory{
@Override
public IphoneProduct iphoneProduct() {
// TODO Auto-generated method stub
return new XiaoMi();
}
@Override
public RootProduct rootProduct() {
// TODO Auto-generated method stub
return new XiaoMiRoot();
}
}
=====================================================
package Factory.abstractfactory;
public class huaweifactory implements ProductFactory{
@Override
public IphoneProduct iphoneProduct() {
// TODO Auto-generated method stub
return new HuaWei();
}
@Override
public RootProduct rootProduct() {
// TODO Auto-generated method stub
return new HuaWeiRoot();
}
}
测试结果
package Factory.abstractfactory;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
xiaomifactory xf = new xiaomifactory();
IphoneProduct product=xf.iphoneProduct();
product.call();
product.start();
product.shutdown();
huaweifactory hf=new huaweifactory();
RootProduct rproduct=hf.rootProduct();
rproduct.accept();
rproduct.send();
rproduct.setting();
}
}
/*
测试结果
小米打电话
小米开机
小米关机
华为路由接收
华为路由发送
华为路由设置
*/