抽象工厂模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象工厂模式相关的知识,希望对你有一定的参考价值。
相对于 工厂模式, 抽象工厂模式 中的 抽象工厂类、实际工厂类 不再负责单一的职责。
例子:
“工厂 职责1”
1 public interface Translate { 2 public void say(String txt); 3 }
1 public class ChineseTranslate implements Translate { 2 3 @Override 4 public void say(String txt) { 5 System.out.println("你好:" + txt); 6 7 } 8 9 }
1 public class EnglishTranslate implements Translate { 2 3 @Override 4 public void say(String txt) { 5 System.out.println("hello:" + txt); 6 7 } 8 9 }
“工厂 职责2”
1 public interface Understand { 2 public void doUnderstand(String txt); 3 }
1 public class ChineseUnderstand implements Understand { 2 3 @Override 4 public void doUnderstand(String txt) { 5 System.out.println("理解"+txt); 6 7 } 8 9 }
1 public class EnglishUnderstand implements Understand{ 2 3 @Override 4 public void doUnderstand(String txt) { 5 System.out.println("understand"+txt); 6 7 } 8 9 }
抽象工厂类
1 public abstract class Factory { 2 public abstract Translate getTranslate(); 3 public abstract Understand getUnderstand(); 4 public void doSomething(String txt){ 5 Translate translate=getTranslate(); 6 Understand understand=getUnderstand(); 7 translate.say(txt); 8 understand.doUnderstand(txt); 9 } 10 }
具体工厂类
1 public class ChineseFactory extends Factory { 2 3 @Override 4 public Translate getTranslate() { 5 // TODO 自动生成的方法存根 6 return new ChineseTranslate(); 7 } 8 9 @Override 10 public Understand getUnderstand() { 11 // TODO 自动生成的方法存根 12 return new ChineseUnderstand(); 13 } 14 15 }
1 public class EnglishFactory extends Factory { 2 3 @Override 4 public Translate getTranslate() { 5 // TODO 自动生成的方法存根 6 return new EnglishTranslate(); 7 } 8 9 @Override 10 public Understand getUnderstand() { 11 // TODO 自动生成的方法存根 12 return new EnglishUnderstand(); 13 } 14 15 }
客户端调用
1 public interface Client { 2 public static void main(String[] args) { 3 /*抽象工厂模式,相对于一个工厂模式,一个工厂不再仅负责单一的产品,处理更多的任务*/ 4 /*相对于 创建者模式, 抽象工厂的 拼接(联系处理)不够灵活*/ 5 Factory factory = new ChineseFactory(); 6 factory.doSomething("测试"); 7 factory = new EnglishFactory(); 8 factory.doSomething("test"); 9 10 11 } 12 }
以上是关于抽象工厂模式的主要内容,如果未能解决你的问题,请参考以下文章