抽象工厂:工厂设计的升级版 工厂设计每次只能只要一个产品对象,抽象工厂可以每次创建一个族的对象
四个角色: 抽象工厂
对象等级: 手机 平板 电脑 对象族:苹果手机 苹果平板 苹果电脑
package com.qf.factorydemo.abstractfactory;
/**
* 抽象工厂类 可以生产一个产品组,工厂方法的升级版
* 产品等级 平板一个等级 手机一个等级 电脑一个等级 等...
* 产品组: 不同等级 同一个族 苹果平板 苹果手机 苹果电脑 等
* <p>
* 主要角色: 抽象工厂 具体工厂 抽象产品 具体产品
* 类似于 组合 一个工厂类 里面有同一族的生产方法
*/
public interface DessertFactory {
//创建咖啡的方法
Coffee createCoffee();
//创建甜品的方法
Dessert createDessert();
}
package com.qf.factorydemo.abstractfactory;
//中国族的甜点 和咖啡
//抹茶和雀巢
public class ChinaCoffeeDessertFactory implements DessertFactory {
@Override
public Coffee createCoffee() {
return new QCcoffee();
}
@Override
public Dessert createDessert() {
return new MCdessert();
}
}
package com.qf.factorydemo.abstractfactory;
//甜品类
public abstract class Dessert {
public abstract void show();
}
package com.qf.factorydemo.abstractfactory;
//抹茶甜点
public class MCdessert extends Dessert {
@Override
public void show() {
System.out.println("抹茶的类");
}
}
package com.qf.factorydemo.abstractfactory;
/**
* 抽象类 具体类去实现
*/
//抽象咖啡
public abstract class Coffee {
//抽象方法
public abstract String getName();
//普通方法
public void addMilk() {
System.out.println("加奶");
}
public void addSugar() {
System.out.println("加糖");
}
}
package com.qf.factorydemo.abstractfactory;
//具体咖啡
public class QCcoffee extends Coffee {
@Override
public String getName() {
return "雀巢咖啡制作";
}
}
package com.qf.factorydemo.abstractfactory;
//抽象工厂的测试
//抽象工厂 可以一次创建多个对象 但是 创建 只能是 统一族 的 一旦新加 就全部都要改
public class Client {
public static void main(String[] args) {
//声明工厂类
ChinaCoffeeDessertFactory chinaCoffeeDessertFactory = new ChinaCoffeeDessertFactory();
//工厂创造对象
Coffee coffee = chinaCoffeeDessertFactory.createCoffee();
Dessert dessert = chinaCoffeeDessertFactory.createDessert();
System.out.println(coffee.getName());
dessert.show();
}
}