java23种设计模式之九: 抽象工厂方法模式
一.抽象工厂定义
上一讲我们说了一下工厂方法,那么我们如何对工厂进行抽象。
因为工厂是生产产品的,现在我们需要工厂抽象,只生产抽象产品,不生产具体的产品,这同时也体现了java的多态。
现在有2个抽象,一个是抽象工厂,另一个是抽象产品。
下面介绍抽象产品到具体产品:
产品的具体实现可以有多种方式,可以有抽象类去实现抽象产品中共有的方法,另一部分交给子类实现,这样,我们就可以把产品一些公有的属性抽象出来,一些
特有的属性由子类根据自身条件实现,这样就可以有同种功能,不同型号的产品。
下面介绍抽象工厂到具体工厂:
抽象工厂是生产产品的,生产具体哪一款产品我们不得而知,但是我们可以通过前面的具体的产品来判断,生产同种类型的产品地方只能是具体类型工厂了,比如
小米手机工厂只能生产小米手机,苹果手机工厂只生产苹果手机,这样我们就可以有具体的工厂了。下面看2个类型的示例:
//接口 interface Phone{ //打电话 void call(); //发短信 void sendMsg(); //品牌 void brand(); } //抽象类,只实现部分功能 abstract class AbstractPhone implements Phone{ @Override public void call() { System.out.println("手机在打电话..."); } @Override public void sendMsg() { System.out.println("手机在发信息..."); } } //具体实现类1:苹果手机 class ApplePhone extends AbstractPhone{ @Override public void brand() { System.out.println("苹果手机"); this.call(); this.sendMsg(); } } //具体实现类2:小米手机 class XiaoMiPhone extends AbstractPhone{ @Override public void brand() { System.out.println("小米手机"); this.call(); this.sendMsg(); } } //抽象工厂:生产手机 interface PhoneFactory{ Phone createPhone(); } //具体工厂1:生产苹果手机 class ApplePhoneFactory implements PhoneFactory{ @Override public Phone createPhone() { return new ApplePhone(); } } //具体工厂2:生产小米手机 class XiaoMiFactory implements PhoneFactory{ @Override public Phone createPhone() { return new XiaoMiPhone(); } }
//接口 interface Human{ void getColor(); void talk(); void getSex(); } //抽象类,只实现部分功能 abstract class AbstractYellowHuman implements Human{ @Override public void getColor() { System.out.println("yellow color..."); } @Override public void talk() { System.out.println("yellow talk..."); } } //具体实现类1:具体实现类会完成父类接口中未完成的方法 class MaleYellowMan extends AbstractYellowHuman{ @Override public void getSex() { System.out.println("yellow...male"); } } //具体实现类2:具体实现类会完成父类接口中未完成的方法 class FemaleYellowMan extends AbstractYellowHuman{ @Override public void getSex() { System.out.println("yellow...female"); } } //抽象工厂 interface HumanFactory{ Human createYelloHuman(); } //具体工厂1:创建男性的工厂 class MaleFactory implements HumanFactory{ @Override public Human createYelloHuman() { return new MaleYellowMan(); //创建黄种人,男性角色 } } //具体工厂2:创建女性的工厂 class FemaleFactory implements HumanFactory{ @Override public Human createYelloHuman() { return new FemaleYellowMan(); } }
由于本人是自己学习总结出来的,有不足之处,请各位看官批评指出,我将及时改正,以提高知识总结的正确性和严谨性,为大家学习提供方便!!!
如若转载,请注明出处!!!