工厂设计模式
来源:互联网 发布:手机淘宝怎么引流 编辑:程序博客网 时间:2024/04/28 07:08
介绍
- 用工厂类的方法代替new,自主实例化对象
- 实现创建和调用的分离
简单工厂
public interface Moveable { public void run();}
public class Car implements Moveable { @Override public void run() { System.out.println("car is running"); }}
public class Train implements Moveable { @Override public void run() { System.out.println("train is running"); }}
public class MoveableFactory { public static Moveable createMoveable(String moveable){ if(moveable=="car"){ return new Car(); }else if(moveable=="train"){ return new Train(); } return null; }}
public class MyLearn { public static void main(String[] args) throws Exception { Moveable moveable = MoveableFactory.createMoveable("train"); moveable.run(); //train is running }}
- 开闭原则(OCP):对扩展开放,对修改关闭,即通过创建新的类来扩展,不应在原有代码上改动
- 简单工厂不满足开闭原则,如果增加新的Moveable,需要修改MoveableFactory类的代码,解决方法:工厂方法设计模式
工厂方法
public interface MoveableFactory { public Moveable createMoveable();}
public class CarFactory implements MoveableFactory { @Override public Moveable createMoveable() { return new Car(); }}
public class TrainFactory implements MoveableFactory { @Override public Moveable createMoveable() { return new Train(); }}
public static void main(String[] args) throws Exception { Moveable moveable = new CarFactory().createMoveable(); moveable.run(); //car is running }
- 每次增加一个产品都需要增加一个工厂,造成工厂泛滥
- 可以用反射解决这个问题
public class MoveableFactory { public static Moveable createMoveable(Class<? extends Moveable> clazz) { Object object=null; try { object = Class.forName(clazz.getName()).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return (Moveable) object; }}
public static void main(String[] args) throws Exception { Moveable moveable = MoveableFactory.createMoveable(Train.class); moveable.run(); }
抽象工厂
- 创建一套产品族,例如QQ 换肤,一换一整套
public interface AbstractFactory {public Shape createShape();public Color createColor();}
public class AppearanceOne implements AbstractFactory { @Override public Shape createShape() { return new circle(); } @Override public Color createColor() { return new Red(); }}
public static void main(String[] args) throws Exception { AbstractFactory f=new AppearanceOne(); Color color = f.createColor(); color.getColor(); Shape shape = f.createShape(); shape.getShape(); }
阅读全文
0 0
- 设计模式--工厂设计
- 设计模式------工厂模式
- 设计模式------工厂模式
- 设计模式 [ 工厂模式 ]
- 设计模式--工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式 工厂模式
- 设计模式-工厂模式
- 设计模式 -- 工厂模式
- 设计模式-工厂模式
- 设计模式----工厂模式
- 设计模式---工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 设计模式---工厂模式
- 设计模式-工厂模式
- 设计模式--工厂模式
- 四步完成Spring国际化动态配置
- SpringMVC学习系列 解决GET请求时中文乱码的问题
- 使用PCF8563实现硬件看门狗
- 我的PMP考试经验
- 26个字母和数字符号ASCII码对照表
- 工厂设计模式
- 转载:Java生成验证码原理
- okhttp
- java历史简介
- 电脑自动关机设置
- 洛谷P2014 选课
- linux activemq-cpp编译
- 作业3.4.5
- poj