首页 > 代码库 > (@WhiteTaken)设计模式学习——抽象工厂模式
(@WhiteTaken)设计模式学习——抽象工厂模式
抽象工厂模式,可以向客户端提供一个接口,而客户端不用指定具体的类型创建对象,却能够创建多个产品族(一类具有共性产品,如地域等)的对象。
下面直接上代码。
1.苹果需要实现水果的接口,而苹果可以有北方的苹果,也可以有南方的苹果,所以也可以抽象成一个父类。
1 public interface Fruit { 2 public void Get(); 3 } 4 5 public abstract class Apple implements Fruit{ 6 public abstract void Get(); 7 }
2.南北方的苹果均需要继承这个父类,并实现父类的中的get方法。
1 public class NorthApple extends Apple { 2 public void Get() { 3 System.out.println("北方苹果"); 4 } 5 } 6 7 public class SouthApple extends Apple { 8 public void Get() { 9 System.out.println("南方苹果"); 10 } 11 }
3.香蕉的做法与苹果类似,抽象的父类继承水果接口,假设南北方都有香蕉吧。
1 public abstract class Banana implements Fruit { 2 public abstract void Get() ; 3 } 4 5 public class SouthBanana extends Banana { 6 public void Get() { 7 System.out.println("南方香蕉"); 8 } 9 } 10 11 public class NorthBanana extends Banana { 12 public void Get() { 13 System.out.println("北方香蕉"); 14 } 15 }
4.这样创建的就都创建完成了。这时候我们考虑的问题,我们要想获得苹果的对象,或者获得香蕉的对象,应该有这样一个工厂去获得。但是苹果与香蕉是分南北的,所以我们需要南北工厂,这两个工厂就是“族”的概念。
这时候可以抽象出水果工厂的接口,接口中的方法分别是获取苹果对象,香蕉对象。
1 public interface FruitFactory { 2 public Fruit getApple(); 3 public Fruit getBanana(); 4 }
5.南北工厂需要实现这个接口。
1 public class SouthFruitFactory implements FruitFactory { 2 public Fruit getApple() { 3 return new SouthApple(); 4 } 5 public Fruit getBanana() { 6 return new SouthBanana(); 7 } 8 } 9 10 public class NorthFruitFactory implements FruitFactory { 11 public Fruit getApple() { 12 return new NorthApple(); 13 } 14 public Fruit getBanana() { 15 return new NorthBanana(); 16 } 17 }
6.这样两个产品族就创建完成了,我们只需要在主客户端中创建南方的工厂,就可以通过调用getApple()方法,得到南方苹果的实例。其他亦然。
1 public class MainClass { 2 public static void main(String[] args) { 3 FruitFactory factory=new NorthFruitFactory(); //获取北方水果工厂的实例 4 Fruit apple=factory.getApple(); //北方苹果 5 Fruit banana=factory.getBanana(); //北方香蕉 6 apple.Get(); 7 banana.Get(); 8 9 FruitFactory factory2=new SouthFruitFactory(); //获取南方水果工厂的实例 10 Fruit apple2=factory2.getApple(); //南方苹果 11 Fruit banana2=factory2.getBanana(); //南方香蕉 12 apple2.Get(); 13 banana2.Get(); 14 } 15 }
个人理解,这个抽象工厂模式,在主客户端调用的时候,只需要获取相应的工厂,就可以得到想要的对象(不用指定具体要获取的对象),实现相应的方法。这里与最开始抽象工厂的方法结合着理解就ok。
(@WhiteTaken)设计模式学习——抽象工厂模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。