600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Java 设计模式之 Abstract Factory 抽象工厂模式

Java 设计模式之 Abstract Factory 抽象工厂模式

时间:2023-06-06 11:03:07

相关推荐

Java 设计模式之 Abstract Factory 抽象工厂模式

在工厂方法基础上,将工厂的生产方法的返回类型从具体产品抽象为抽象产品,同时扩展工厂的方法,支持任意定制产品族,则工厂方法可以升级为抽象工厂模式,比如一家餐厅可以提供牛排(方法A),红酒(方法B),蔬菜汤(方法C),另一个餐厅可以提供水煮鱼,橙汁,乌鸡汤。

抽象产品类:

/*** 主菜抽象类*/public abstract class MainCourse {abstract void printName();}

public abstract class Drink {abstract void printFlavor();}

public abstract class Soup {abstract void printContent();}

抽象工厂类:

public abstract class AbstractFactory {abstract MainCourse supplyFood();abstract Drink supplyDrink();abstract Soup supplySoup();}

具体产品类:

public class Beef extends MainCourse{@Overridevoid printName() {System.out.println("beef");}}

public class Wine extends Drink{@Overridevoid printFlavor() {System.out.println("wine");}}

public class VegetableSoup extends Soup{@Overridevoid printContent() {System.out.println("vegetable soup");}}

public class PoachedFish extends MainCourse{@Overridevoid printName() {System.out.println("poached fish");}}

public class Orange extends Drink{@Overridevoid printFlavor() {System.out.println("orange");}}

public class SilkieSoup extends Soup{@Overridevoid printContent() {System.out.println("silkie soup");}}

具体工厂:

public class FrenchRestaurant extends AbstractFactory{@OverrideMainCourse supplyFood() {return new Beef();}@OverrideDrink supplyDrink() {return new Wine();}@OverrideSoup supplySoup() {return new VegetableSoup();}}

public class ChineseRestaurant extends AbstractFactory{@OverrideMainCourse supplyFood() {return new PoachedFish();}@OverrideDrink supplyDrink() {return new Orange();}@OverrideSoup supplySoup() {return new SilkieSoup();}}

抽象工厂方法的具体使用:

public class Test {public static void main(String[] args) {AbstractFactory ff = new FrenchRestaurant();ff.supplyFood().printName();ff.supplyDrink().printFlavor();ff.supplySoup().printContent();AbstractFactory cf = new ChineseRestaurant();cf.supplyFood().printName();cf.supplyDrink().printFlavor();cf.supplySoup().printContent();}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。