什么是产品族
什么是同一级别
概述
抽象工厂模式用于1对多场景,一个具体工厂对应多个具体产品
优点
当一个产品族的产品设计在一起工作时,能够保证始终只用一个产品族的产品
缺点
当一个产品族新增一个产品的时候,所有的工厂都得修改
使用场景
比如搜狗输入法,我们在切换搜狗输入法的皮肤时,输入法上面的图标也会进行切换,一换就是换一整套(一整套全换是抽象工厂的本意)
思维导图
代码
public interface Coffee {
String getName();
}
public interface Cake {
String getName();
}
public interface AbstarctFactory {
Cake createCake();
Coffee createCoffee();
}
public class ChinaCake implements Cake {
public String getName() {
return "中国蛋糕";
}
}
public class ChinaCoffee implements Coffee {
public String getName() {
return "中国咖啡";
}
}
public class ChinaFactory implements AbstarctFactory {
public Cake createCake() {
return new ChinaCake();
}
public Coffee createCoffee() {
return new ChinaCoffee();
}
}
public class RussiaCake implements Cake {
public String getName() {
return "俄罗斯蛋糕";
}
}
public class RussiaCoffee implements Coffee {
public String getName() {
return "俄罗斯咖啡";
}
}
public class RussiaFactory implements AbstarctFactory {
public Cake createCake() {
return new RussiaCake();
}
public Coffee createCoffee() {
return new RussiaCoffee();
}
}
/**
* 咖啡店
* @author pk
*/
public class CoffeeStore {
private AbstarctFactory abstarctFactory;
public void setCoffeeFactory(AbstarctFactory abstarctFactory) {
this.abstarctFactory = abstarctFactory;
}
public void orderCoffee(){
Coffee coffee = abstarctFactory.createCoffee();
System.out.println(coffee.getName());
}
public void orderCake(){
Cake cake = abstarctFactory.createCake();
System.out.println(cake.getName());
}
}
public class Test {
public static void main(String[] args) {
CoffeeStore coffeeStore = new CoffeeStore();
AbstarctFactory coffeeFactory = new RussiaFactory();
coffeeStore.setCoffeeFactory(coffeeFactory);
coffeeStore.orderCoffee();
coffeeStore.orderCake();
}
}