先来看一下图
分别来看一下相应的代码,抽象工厂类:
package com.fanyafeng.abstractfactory.abfactory;
import com.fanyafeng.abstractfactory.mobilephonefactory.MobilePhone;
import com.fanyafeng.abstractfactory.vrfactory.VR;
/**
* Created by fanyafeng on 16/7/1.
*/
public abstract class AbstractFactory {
public abstract MobilePhone getMobilPhone(String phone);
public abstract VR getVR(String vr);
}
抽象工厂建造者
package com.fanyafeng.abstractfactory.abfactory;
import com.fanyafeng.abstractfactory.mobilephonefactory.MobilePhoneFactory;
import com.fanyafeng.abstractfactory.vrfactory.VRFactory;
/**
* Created by fanyafeng on 16/7/1.
*/
public class FactoryProducter {
public static AbstractFactory getFactory(String factroy) {
switch (factroy) {
case "MobilePhoneFactory":
return new MobilePhoneFactory();
case "VRFactory":
return new VRFactory();
default:
return null;
}
}
}
再分别看mobiel和vr的接口声明
package com.fanyafeng.abstractfactory.mobilephonefactory;
/**
* Created by fanyafeng on 16/7/1.
*/
public interface MobilePhone {
public void create();
}
package com.fanyafeng.abstractfactory.vrfactory;
/**
* Created by fanyafeng on 16/7/1.
*/
public interface VR {
public void research();
}
这两个的工厂
package com.fanyafeng.abstractfactory.mobilephonefactory;
import com.fanyafeng.abstractfactory.abfactory.AbstractFactory;
import com.fanyafeng.abstractfactory.mobilephone.HTC;
import com.fanyafeng.abstractfactory.mobilephone.Iphone;
import com.fanyafeng.abstractfactory.mobilephone.Mi;
import com.fanyafeng.abstractfactory.vrfactory.VR;
/**
* Created by fanyafeng on 16/7/1.
*/
public class MobilePhoneFactory extends AbstractFactory{
@Override
public MobilePhone getMobilPhone(String phone) {
switch (phone){
case "HTC":
return new HTC();
case "Iphone":
return new Iphone();
case "Mi":
return new Mi();
default:
return null;
}
}
@Override
public VR getVR(String vr) {
return null;
}
}
package com.fanyafeng.abstractfactory.vrfactory;
import com.fanyafeng.abstractfactory.abfactory.AbstractFactory;
import com.fanyafeng.abstractfactory.mobilephonefactory.MobilePhone;
import com.fanyafeng.abstractfactory.vr.DaPeng;
import com.fanyafeng.abstractfactory.vr.HeadSet;
/**
* Created by fanyafeng on 16/7/1.
*/
public class VRFactory extends AbstractFactory{
@Override
public MobilePhone getMobilPhone(String phone) {
return null;
}
@Override
public VR getVR(String vr) {
switch (vr){
case "DaPeng":
return new DaPeng();
case "HeadSet":
return new HeadSet();
default:
return null;
}
}
}
剩下的是具体的建造对象
package com.fanyafeng.abstractfactory.mobilephone;
import com.fanyafeng.abstractfactory.mobilephonefactory.MobilePhone;
/**
* Created by fanyafeng on 16/7/1.
*/
public class HTC implements MobilePhone {
@Override
public void create() {
System.out.println("HTC制造的手机");
}
}
package com.fanyafeng.abstractfactory.mobilephone;
import com.fanyafeng.abstractfactory.mobilephonefactory.MobilePhone;
/**
* Created by fanyafeng on 16/7/1.
*/
public class Iphone implements MobilePhone {
@Override
public void create() {
System.out.println("苹果制造的手机");
}
}
package com.fanyafeng.abstractfactory.mobilephone;
import com.fanyafeng.abstractfactory.mobilephonefactory.MobilePhone;
/**
* Created by fanyafeng on 16/7/1.
*/
public class Mi implements MobilePhone{
@Override
public void create() {
System.out.println("小米制造的手机");
}
}
package com.fanyafeng.abstractfactory.vr;
import com.fanyafeng.abstractfactory.vrfactory.VR;
/**
* Created by fanyafeng on 16/7/1.
*/
public class DaPeng implements VR{
@Override
public void research() {
System.out.println("大鹏研究的VR产品");
}
}
package com.fanyafeng.abstractfactory.vr;
import com.fanyafeng.abstractfactory.vrfactory.VR;
/**
* Created by fanyafeng on 16/7/1.
*/
public class HeadSet implements VR {
@Override
public void research() {
System.out.println("HTC研究的VR产品");
}
}
main的测试
package com.fanyafeng.abstractfactory;
import com.fanyafeng.abstractfactory.abfactory.AbstractFactory;
import com.fanyafeng.abstractfactory.abfactory.FactoryProducter;
import com.fanyafeng.abstractfactory.mobilephonefactory.MobilePhone;
import com.fanyafeng.abstractfactory.vrfactory.VR;
import com.fanyafeng.abstractfactory.vrfactory.VRFactory;
/**
* Created by fanyafeng on 16/7/1.
*/
public class Main {
public static void main(String[] args) {
AbstractFactory vrFactory = FactoryProducter.getFactory("VRFactory");
VR vr = vrFactory.getVR("DaPeng");
vr.research();
AbstractFactory mobilePhoneFactroy=FactoryProducter.getFactory("MobilePhoneFactory");
MobilePhone mobilePhone=mobilePhoneFactroy.getMobilPhone("Mi");
mobilePhone.create();
}
}
总体来说感觉这个模式好抽象,没有找到挺好的描述语言,大家也可以根据模式的六原则进行对应