设计模式之抽象工厂模式
2017-06-30 14:50
387 查看
前言:
抽象工厂模式(Abstract Factory Pattern)是提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。一. 抽象工厂模式的简介:
优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象,方便切换产品系列。缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。
二. 抽象工厂的实例:
实例:脸萌APP中,实现多款风格和不同性别头像的创建。UML类图模型:
2 .男女款式接口:
男孩款式:
package com.test.service.sex; /** * 男孩款式 * @author 葫芦娃 * */ public interface Boy { public void drawMan(); }
女孩款式:
package com.test.service.sex; /** * 女孩款式 * @author 葫芦娃 * */ public interface Girl { public void drawWomen(); }
3 .产品类:
新年风格男款类:
package com.test.impl.product; import com.test.service.sex.Boy; /** * 新年风格男款 * @author 葫芦娃 * */ public class HNBoy implements Boy { @Override public void drawMan() { System.out.println("-----------------新年风格男款--------------------"); } }
新年风格女款类:
package com.test.impl.product; import com.test.service.sex.Girl; /** * 新年风格女款 * @author 葫芦娃 * */ public class HNGirl implements Girl { @Override public void drawWomen() { System.out.println("-----------------新年风格女款--------------------"); } }
圣诞风格男款类:
package com.test.impl.product; import com.test.service.sex.Boy; /** * 圣诞风格男款 * @author 葫芦娃 * */ public class MCBoy implements Boy { @Override public void drawMan() { System.out.println("-----------------圣诞风格男款--------------------"); } }
圣诞风格女款类:
package com.test.impl.product; import com.test.service.sex.Girl; /** * 圣诞风格女款 * @author 葫芦娃 * */ public class MCGirl implements Girl { @Override public void drawWomen() { System.out.println("-----------------圣诞风格女款--------------------"); } }
4 .人物抽象工厂类
package com.test.service.factory; import com.test.service.sex.Boy; import com.test.service.sex.Girl; /** * 人物的实现接口 * @author 葫芦娃 * */ public interface PersonFactory { //男孩接口 public Boy getBoy(); //女孩接口 public Girl getGirl(); }
5 . 两种主题风格的工厂类
新年风格工厂类:
package com.test.service.holiday; import com.test.impl.product.HNBoy; import com.test.impl.product.HNGirl; import com.test.service.factory.PersonFactory; import com.test.service.sex.Boy; import com.test.service.sex.Girl; /** * 新年风格工厂(Happy NewYear Factory) * @author 葫芦娃 * */ public class HNFactory implements PersonFactory { @Override public Boy getBoy() { return new HNBoy(); } @Override public Girl getGirl() { return new HNGirl(); } }
圣诞风格工厂:
package com.test.service.holiday; import com.test.impl.product.MCBoy; import com.test.impl.product.MCGirl; import com.test.service.factory.PersonFactory; import com.test.service.sex.Boy; import com.test.service.sex.Girl; /** * 圣诞风格工厂(Merry Christmas Factory) * @author 葫芦娃 * */ public class MCFctory implements PersonFactory { @Override public Boy getBoy() { return new MCBoy(); } @Override public Girl getGirl() { return new MCGirl(); } }
6 . 客户端:
package com.test.client; import com.test.service.factory.PersonFactory; import com.test.service.holiday.HNFactory; import com.test.service.holiday.MCFctory; import com.test.service.sex.Boy; import com.test.service.sex.Girl; /** * 客户端 * @author 葫芦娃 * */ public class Client { public static void main(String[] args){ PersonFactory factory1 = new HNFactory(); Boy boy1 = factory1.getBoy(); boy1.drawMan(); Girl girl1 = factory1.getGirl(); girl1.drawWomen(); PersonFactory factory2 = new MCFctory(); Boy boy2 = factory2.getBoy(); boy2.drawMan(); Girl girl2 = factory2.getGirl(); girl2.drawWomen(); } }
运行结果:
-----------------新年风格男款-------------------- -----------------新年风格女款-------------------- -----------------圣诞风格男款-------------------- -----------------圣诞风格女款--------------------
三. 总结:
抽象工厂的优点:1. 像PersonFactory factory1 = new HNFactory(),在一个应用中初始化的时候只会出现一次,改变一个具体工厂变得容易,只需要改变具体的工厂,就可以使用不同的产品配置。
2. 让创建实例的过程与客户端分离,客户端通过它们的抽象接口,操纵实例,产品的具体类名也被工厂分离,不会出现在,客户端代码中。
抽象工厂的缺点:抽象工厂方便切换产品系列,却在新增功能时候,却需要更改三个工厂类,代码改动太大。
相关文章推荐
- 设计模式系列--抽象工厂模式
- 设计模式之抽象工厂模式
- 设计模式之抽象工厂模式(Abstract Factroy)
- 设计模式和原则:抽象工厂模式
- 设计模式学习--抽象工厂模式
- 设计模式-抽象工厂模式
- 设计模式-抽象工厂模式(abstractFactory pattern)
- <Java设计模式>—抽象工厂模式
- 设计模式之抽象工厂模式
- 23种设计模式(3):抽象工厂模式
- JAVA 设计模式抽象工厂模式
- 设计模式(3)---->抽象工厂模式
- 设计模式知识连载(15)---抽象工厂模式:
- 23种设计模式之抽象工厂模式
- 设计模式笔记(3)---抽象工厂模式(创建型)
- 设计模式之抽象工厂模式
- 详解C#的设计模式编程之抽象工厂模式的应用
- C#设计模式——抽象工厂模式(Abstract Factory Pattern)
- 设计模式-抽象工厂模式
- 极速理解设计模式系列:10.抽象工厂模式(Abstract Factory Pattern)