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(); } }
时间: 2024-11-06 10:54:11