工厂模式
来源:互联网 发布: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
- 工厂模式 -- 工厂方法
- 工厂模式 -- 抽象工厂
- 工厂模式-简单工厂
- 工厂模式-工厂方法
- 工厂模式:静态工厂
- 工厂模式-简单工厂
- 工厂模式-抽象工厂
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-静态工厂
- 工厂模式-抽象工厂
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- Java线程的创建
- 第二周项目1旱冰场造价
- 利用中根序列和后根序列重建二叉树
- Hostker云主机
- [阿牛的牛肉串]
- 工厂模式
- Mjpeg‐stream移植
- c++ substr()字符函数的使用方法
- 计算机知识图谱
- 黑马程序员 -- C语言 指令 变量存储 二进制
- HTTP协议
- 5.1 Spring的数据访问哲学
- 使用asm.jar捕获Android动态屏幕
- URAL 1157. Young Tiler (数学啊 )