工厂模式

来源:互联网 发布:java编程工具安卓 编辑:程序博客网 时间:2024/06/06 09:23

1、作用

实现创建者和调用者的分离。

2、类型

2.1 简单工厂
特点:需要的类少,创建简单。不符合对扩展开放、对修改关闭原则。
/** * 产品接口 * @author Administrator * */public interface Car {void run();}/** * 子类实现 * @author Administrator * */public class BenzCar implements Car{@Overridepublic void run() {System.out.println("BenzCar run...");}}/** * 子类实现 * @author Administrator * */public class BmwCar implements Car{@Overridepublic void run() {System.out.println("BmwCar run...");}}/** * 工厂类 * @author Administrator * */public class CarFactory {public static Car creatCar(String car) {if("BenzCar".equals(car)) {return new BenzCar();}else if("BmwCar".equals(car)) {return new BmwCar();}else {return null;}}}/** * 调用类 * @author Administrator * */public class SimpleFactory {public static void main(String[] args) {Car benzCar = CarFactory.creatCar("BenzCar");benzCar.run();Car bmwCar = CarFactory.creatCar("BmwCar");bmwCar.run();}}
2.2 工厂方法
特点:需要创建的类多。符合对扩展开放、对修改关闭原则。
/** * 产品接口 * @author Administrator * */public interface Car {void run();}/** * 子类实现 * @author Administrator * */public class BenzCar implements Car{@Overridepublic void run() {System.out.println("BenzCar run...");}}/** * 子类实现 * @author Administrator * */public class BmwCar implements Car{@Overridepublic void run() {System.out.println("BmwCar run...");}}/** * 工厂方法接口 * @author Administrator * */public interface CarFactory {Car createCar();}/** * 工厂方法实现类 * @author Administrator * */public class BenzCarFactory implements CarFactory{@Overridepublic Car createCar() {return new BmwCar();}}/** * 工厂方法实现类 * @author Administrator * */public class BmwCarFactory implements CarFactory{@Overridepublic Car createCar() {return new BenzCar();}}public class FactoryMethod {public static void main(String[] args) {Car benz = new BenzCarFactory().createCar();benz.run();Car bmw = new BmwCarFactory().createCar();bmw.run();}}
2.3 工厂方法
特点:用来生成不同产品族,产品族是由各个产品不同部分组成不同值组成的。例如车是由引擎、车窗、坐位等组成。
/** * 组件接口一 * @author Administrator * */public interface Engine {void say();}/** * 组件接口一的实现一 * @author Administrator * */public class BadEngine implements Engine{@Overridepublic void say() {System.out.println("This is bad engine");}}/** * 组件接口一的实现二 * @author Administrator * */public class GoodEngine implements Engine{@Overridepublic void say() {System.out.println("This is good engine");}}/** * 组件接口二 * @author Administrator * */public interface Seat {void say();}/** * 组件接口二的实现一 * @author Administrator * */public class BadSeat implements Seat{@Overridepublic void say() {System.out.println("This is bad seat");}}/** * 组件接口二的实现二 * @author Administrator * */public class GoodSeat implements Seat{@Overridepublic void say() {System.out.println("This is good seat");}}/** * 组件接口三 * @author Administrator * */public interface Window {void say();}/** * 组件接口三的实现一 * @author Administrator * */public class BadWindow implements Window{@Overridepublic void say() {System.out.println("This is bad window");}}/** * 组件接口三的实现二 * @author Administrator * */public class GoodWindow implements Window{@Overridepublic void say() {System.out.println("This is good window");}}/** * 工厂接口 * @author Administrator * */public interface CarFactory {Engine createEngine();Seat createSeat();Window createWindow();}/** * 工厂实现类一 * @author Administrator * */public class BadCarFactory implements CarFactory{@Overridepublic Engine createEngine() {return new BadEngine();}@Overridepublic Seat createSeat() {return new BadSeat();}@Overridepublic Window createWindow() {return new BadWindow();}}/** * 工厂实现类二 * @author Administrator * */public class GoodCarFactory implements CarFactory{@Overridepublic Engine createEngine() {return new GoodEngine();}@Overridepublic Seat createSeat() {return new GoodSeat();}@Overridepublic Window createWindow() {return new GoodWindow();}}public class AbstractFactory {public static void main(String[] args) {CarFactory cf1 = new GoodCarFactory();Engine e1 = cf1.createEngine();Seat s1 = cf1.createSeat();Window w1 =  cf1.createWindow();e1.say();s1.say();w1.say();CarFactory cf2 = new BadCarFactory();Engine e2 = cf2.createEngine();Seat s2 = cf2.createSeat();Window w2 =  cf2.createWindow();e2.say();s2.say();w2.say();}}





0 0
原创粉丝点击