一抽象工厂模式&&简单工厂+反射改进抽象工厂
Posted 国境之南时代
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一抽象工厂模式&&简单工厂+反射改进抽象工厂相关的知识,希望对你有一定的参考价值。
1 抽象工厂?
抽象工厂用在既有产品树,又有产品族的场合。
产品树:奔驰旗下的跑车和商务车构成产品树
产品族:奔驰旗下的跑车与奥迪旗下的跑车构成产品族。
/*
缺点:此时如果需要增加一个红旗厂家的车,需要改的地方很多。
1 定义红旗抽象类,具体类;
2 Factory接口增加生产红旗的工厂;
3 跑车工厂和商务车工厂都需要实现相应的生产红旗的接口。
*/
/*
优点:当需要使用不同产品时,只需要改一行代码 Factory factory = new SprotCarFactory();,即初始化不同的工厂,就可以调用工厂中的不同方法了。
*/
package com.biao.factory.abstractfactory; public class AbstractFactoryDemo { public static void main(String[] args) { Factory factory = new SprotCarFactory(); AudiCar audiCar = factory.createAudiCar(); audiCar.drive(); Factory bussinessCarfactory = new BusinessCarFactory(); BenzCar benzCar = bussinessCarfactory.createBenzCar(); benzCar.drive(); } } abstract class BenzCar{ abstract void drive(); } class BenzSportCar extends BenzCar{ @Override void drive() { System.out.println("奔驰旗下的跑车"); } } class BenzBusinessCar extends BenzCar{ @Override void drive() { System.out.println("奔驰旗下的商务车"); } } abstract class AudiCar{ abstract void drive(); } class AudiSportCar extends AudiCar{ @Override void drive() { System.out.println("奥迪旗下的跑车"); } } class AudiBusinessCar extends AudiCar{ @Override void drive() { System.out.println("奥迪旗下的商务车"); } } interface Factory{ BenzCar createBenzCar(); AudiCar createAudiCar(); } class SprotCarFactory implements Factory{ @Override public BenzCar createBenzCar() { // TODO Auto-generated method stub return new BenzSportCar(); } @Override public AudiCar createAudiCar() { // TODO Auto-generated method stub return new AudiSportCar(); } } class BusinessCarFactory implements Factory{ @Override public BenzCar createBenzCar() { // TODO Auto-generated method stub return new BenzBusinessCar(); } @Override public AudiCar createAudiCar() { // TODO Auto-generated method stub return new AudiBusinessCar(); } }
2 代码改进?
package com.biao.factory.abstractfactory.improment; /* * 改进以后,如果要加入红旗系列的车,需要做的: 1 定义红旗抽象类,具体类; 2 Factory接口增加一个生产红旗车的方法。 */ public class ReflactAddASimpleFactory { public static void main(String[] args) { try { AudiCar createAudiCar = Factory.createAudiCar("com.biao.factory.abstractfactory.improment.AudiSportCar"); BenzCar createBenzCar = Factory.createBenzCar("com.biao.factory.abstractfactory.improment.BenzBusinessCar"); createBenzCar.drive(); createAudiCar.drive(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } abstract class BenzCar{ abstract void drive(); } class BenzSportCar extends BenzCar{ @Override void drive() { System.out.println("奔驰旗下的跑车"); } } class BenzBusinessCar extends BenzCar{ @Override void drive() { System.out.println("奔驰旗下的商务车"); } } abstract class AudiCar{ abstract void drive(); } class AudiSportCar extends AudiCar{ @Override void drive() { System.out.println("奥迪旗下的跑车"); } } class AudiBusinessCar extends AudiCar{ @Override void drive() { System.out.println("奥迪旗下的商务车"); } } /*用简单工厂配合反射 替代抽象工厂*/ class Factory{ public static AudiCar createAudiCar(String name) throws Exception{ return (AudiCar)Class.forName(name).newInstance(); } public static BenzCar createBenzCar(String name) throws Exception{ return (BenzCar) Class.forName(name).newInstance(); } }
以上是关于一抽象工厂模式&&简单工厂+反射改进抽象工厂的主要内容,如果未能解决你的问题,请参考以下文章