
/**
* 抽象产品类
*/
public abstract class Product {
public abstract void show();
}
/**
* 具体产品A
*/
class ProductA extends Product{
@Override
public void show() {
System.out.println("生产了产品A");
}
}
/**
* 具体产品B
*/
class ProductB extends Product{
@Override
public void show() {
System.out.println("生产了产品B");
}
}
class ProductC extends Product{
@Override
public void show() {
System.out.println("生产了产品C");
}
/**
* 简单工厂
*/
public class SimpleFactory {
public static Product getProduct(String productName){
switch (productName){
case "A":
return new ProductA();
case "B":
return new ProductB();
case "C":
return new ProductC();
default :
return null;
}
}
}
public static void main(String[] args) {
try {
SimpleFactory.getProduct("A").show();
SimpleFactory.getProduct("B").show();
SimpleFactory.getProduct("C").show();
SimpleFactory.getProduct("D").show();
} catch (Exception e) {
System.out.println("没有该产品");
}
}
测试结果
生产了产品A
生产了产品B
生产了产品C
没有该产品

结构:
优点:
缺点
适用场景
/**
* 抽象产品类
*/
public abstract class Product {
public abstract void show();
}
/**
* 具体产品A
*/
class ProductA extends Product{
@Override
public void show() {
System.out.println("产品A");
}
}
/**
* 具体产品B
*/
class ProductB extends Product{
@Override
public void show() {
System.out.println("产品B");
}
}
//抽象工厂类
abstract class Factory{
public abstract Product getProduct();
}
//工厂A类 - 生产A类产品
class FactoryA extends Factory{
@Override
public Product getProduct() {
return new ProductA();
}
}
//工厂B类 - 生产B类产品
class FactoryB extends Factory{
@Override
public Product getProduct() {
return new ProductB();
}
public static void main(String[] args){
//客户要产品A
FactoryA mFactoryA = new FactoryA();
mFactoryA.getProduct().Show();
//客户要产品B
FactoryB mFactoryB = new FactoryB();
mFactoryB.getProduct().Show();
}
测试结果
产品A
产品B
一种为用户类提供创建一组相关或互相依赖的对象的接口,而且用户类无需指定他们的具体类就能得到同族的不同等级的产品模式结构
产品族:一个品牌下的所有产品, 同一个工厂生产的,位于不同产品等级结构中的一组产品。
产品等级:多个品牌下的同种产品,产品等级结构即产品的继承结构


结构:
/**
* 抽象工厂类
*/
public interface IProductFactory {
//生产手机
IPhoneProduct phoneProduct();
//生成路由器
IRouterProduct routerProduct();
}
/**
* 手机产品抽象接口
*/
public interface IPhoneProduct {
//开机
void start();
//关机
void shutdown();
//打电话
void callup();
//发邮件
void sendSMS();
}
/**
* 路由器产品抽象接口
*/
public interface IRouterProduct {
//开机
void start();
//关机
void shutdown();
//打开wifi
void openwifi();
//设置
void setting();
}
//华为工厂实现类
public class HuaweiFactory implements IProductFactory {
@Override
public IPhoneProduct phoneProduct() {
return new HuaweiPhone();
}
@Override
public IRouterProduct routerProduct() {
return new HuaweiRouter();
}
}
//小米工厂实现类
public class XiaomiFactory implements IProductFactory {
@Override
public IPhoneProduct phoneProduct() {
return new XiaomiPhone();
}
@Override
public IRouterProduct routerProduct() {
return new XiaomiRouter();
}
}
//华为手机实现类
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 sendSMS() {
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 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 sendSMS() {
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 static void main(String[] args) {
System.out.println("============小米产品============");
//创建小米工厂
IProductFactory xiaomiFactory = new XiaomiFactory();
//生产小米手机
IPhoneProduct xiaomiPhone = xiaomiFactory.phoneProduct();
xiaomiPhone.start();
xiaomiPhone.sendSMS();
//生产小米路由器
IRouterProduct xiaomiRouter = xiaomiFactory.routerProduct();
xiaomiRouter.openwifi();
xiaomiRouter.setting();
System.out.println("============华为产品============");
//创建华为工厂
IProductFactory huaweiFactory = new HuaweiFactory();
//生产华为手机
IPhoneProduct huaweiPhone = huaweiFactory.phoneProduct();
huaweiPhone.start();
huaweiPhone.sendSMS();
//生产华为路由器
IRouterProduct huaweiRouter = huaweiFactory.routerProduct();
huaweiRouter.openwifi();
huaweiRouter.setting();
}
测试结果
============ 小米产品 ============
开启小米手机
小米手机发邮件
打开小米wifi
设置小米路由器
============ 华为产品 ============
开启华为手机
华为手机发邮件
打开华为wifi
设置华为路由器
简单工厂模式:只有一个实体工厂类;一个实体工厂类生产所有的产品类,工厂根据传入的参数判断具体生产哪个产品给客户。
工厂方法模式:只有一个抽象产品类;一个实体工厂类生产一种产品类,客户需要知道生产该产品的工厂类名称。
抽象工厂模式:有多个抽象产品类;一个实体工厂类可以生产多种产品类,客户可以从一个工厂获得所有想要的产品。
