设计模式第三讲:抽象工厂
来源:互联网 发布:如何学好ps软件 编辑:程序博客网 时间:2024/04/28 14:01
抽象工厂
一.模式定义:
为创建一系列的相关或者依赖的对象提供一个接口,而且无需指定他们的具体类。
二.模式特点:
是工厂方法的升级版,在涉及要创建多个相关的类对象时,是很好的解决方案。
三.使用场景:
在工厂方法的基础上,还需要创建多个相关或依赖的类时(比如产生具有性别的动物),可以使用。
四.具体实现:
1.定义基本类:这里以具有性别的动物为例子,Animal这个父类在上一章工厂方法中有提及。
//要生产雄性动物的基本抽象类public abstract class MaleAnimal extends Animal{//动物的名称public abstract String name();//动物的叫声public abstract String sound();//动物的性别public String sex(){return "性别为:公的";};}
//要生产雌性动物的基本抽象类public abstract class FemaleAnimal extends Animal{//动物的名称public abstract String name();//动物的叫声public abstract String sound();//动物的性别public String sex(){return "性别为:母的";};}
2.定义具体类,这里以猫狗为例子。
//具体的动物public class MaleCat extends MaleAnimal{@Overridepublic String name() {// TODO Auto-generated method stubreturn "猫";}@Overridepublic String sound() {// TODO Auto-generated method stubreturn "叫:喵喵";}}
//具体的动物public class MaleDog extends MaleAnimal{@Overridepublic String name() {// TODO Auto-generated method stubreturn "狗";}@Overridepublic String sound() {// TODO Auto-generated method stubreturn "叫:汪汪";}}
//具体的动物public class FemaleCat extends FemaleAnimal{@Overridepublic String name() {// TODO Auto-generated method stubreturn "猫";}@Overridepublic String sound() {// TODO Auto-generated method stubreturn "叫:喵喵";}}
//具体的动物public class FemaleDog extends FemaleAnimal{@Overridepublic String name() {// TODO Auto-generated method stubreturn "狗";}@Overridepublic String sound() {// TODO Auto-generated method stubreturn "叫:汪汪";}}
3.定义抽象工厂类。
//抽象工厂的定义public abstract class AnimalFactory {public abstract Animal getAnimal(Class c);}
4.定义具体工厂类,由于动物具有两种性别,所以创建两种工厂。
//雄性动物工厂的定义public class MaleAnimalFactory extends AnimalFactory{public MaleAnimal getAnimal(Class c){MaleAnimal maleAnimal = null;try {maleAnimal = (MaleAnimal)Class.forName(c.getName()).newInstance();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("必须指定动物类型");} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("动物定义错误");} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("找不到你需要的动物");}return maleAnimal;}}
//工厂的定义public class FemaleAnimalFactory extends AnimalFactory{public FemaleAnimal getAnimal(Class c){FemaleAnimal femaleAnimal = null;try {femaleAnimal = (FemaleAnimal)Class.forName(c.getName()).newInstance();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("必须指定动物类型");} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("动物定义错误");} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("找不到你需要的动物");}return femaleAnimal;}}
5.使用实例。
public class main {public static void main(String[] args){MaleAnimalFactory factory1 = new MaleAnimalFactory();//工厂生产出一只公狗MaleAnimal dog = factory1.getAnimal(MaleDog.class);System.out.println(dog.sex()+dog.name()+dog.sound());//工厂生产出一只公猫MaleAnimal cat = factory1.getAnimal(MaleCat.class);System.out.println(cat.sex()+cat.name()+cat.sound());FemaleAnimalFactory factory2 = new FemaleAnimalFactory();//工厂生产出一只母狗FemaleAnimal dog2 = factory2.getAnimal(FemaleDog.class);System.out.println(dog2.sex()+dog2.name()+dog2.sound());//工厂生产出一只母猫FemaleAnimal cat2 = factory2.getAnimal(FemaleCat.class);System.out.println(cat2.sex()+cat2.name()+cat2.sound());}}
0 0
- 设计模式第三讲:抽象工厂
- 第三篇 设计模式--抽象工厂模式
- 第三篇 设计模式之抽象工厂方法模式
- 抽象工厂模式第三步-使用抽象工厂模式-马士兵设计模式教程 .
- 抽象工厂设计模式
- 设计模式-----抽象工厂
- 抽象工厂设计模式
- 抽象工厂设计模式
- 抽象工厂设计模式
- 设计模式 抽象工厂
- 设计模式--抽象工厂
- 设计模式--抽象工厂
- 设计模式 抽象工厂
- 设计模式-抽象工厂
- 设计模式-> 抽象工厂
- 抽象工厂设计模式
- 设计模式--抽象工厂
- 【设计模式】抽象工厂
- Caused by: java.lang.ClassNotFoundException: com.mchange.v2.c3p0.ComboPooledDataSource
- Linux下各种编程锁的比较[待续]
- 回顾经典Effective C++ 3 4
- java web Servlet 学习笔记 -3 会话管理技术
- Caused by: java.lang.ClassNotFoundException: com.mchange.v2.ser.Indirector
- 设计模式第三讲:抽象工厂
- 重构改善既有代码的设计--简化函数调用
- centos配置web server
- MySql安装最后一步start service失败,手动启动报1067错误
- Caused by: org.springframework.beans.NotWritablePropertyException
- sdfsdghffghfghfg
- Eclipse中清除记住的GitHub用户名和密码
- 快速删除超大文件夹
- wordpress Error establishing a database connection