设计模式之工厂模式
2017-03-21 00:31
169 查看
0. 概述
工厂模式定义了一个创建对象的接口来创建对象,用工厂方法代替new操作。但是由子类决定要实例化的类是哪一个。工厂方法把实例化的工作推迟到子类中去实现。工厂模式包括工厂方法模式和抽象工厂模式,抽象工厂模式是工厂方法模式的扩展。工厂模式适用场景:(1)有一组类似的对象需要创建;(2)在编码时不能预见需要创建哪种类的实例;(3)考虑系统扩展性,松耦合,降低对象之间的依赖关系。
1. 工厂方法模式
假如你有一家蛋糕店,售卖两种风味蛋糕。//蛋糕抽象类 public abstract class Cake { public abstract void getCake(); }
//草莓风味蛋糕 public class StrawberryCake extends Cake { public void getCake() { System.out.println("This is strawberry cake."); } }
//芒果风味蛋糕 public class MangoCake extends Cake { public void getCake() { System.out.println("This is mango cake."); } }
//蛋糕工厂类 public class CakeFactory { public Cake createCake(String type) { if ("strawberry".equals(type)) { return new StrawberryCake(); } else if ("mango".equals(type)){ return new MangoCake(); } return null; } }
public class DemoTest { public static void main(String[] args) { CakeFactory factory = new CakeFactory(); //创建草莓风味蛋糕 Cake strawberryCake = factory.createCake("strawberry"); strawberryCake.getCake(); //创建芒果风味蛋糕 Cake mangoCake = factory.createCake("mango"); mangoCake.getCake(); } }
2. 抽象工厂模式
随着市场需求的不断变化,冰淇淋逐渐受到顾客的青睐,蛋糕店准备制作销售冰淇淋。同样有草莓风味冰淇淋和芒果风味冰淇淋两种产品。这时就需要不同的工厂,负责产生不同风味的产品。我们需要将工厂类抽象化,草莓风味工厂和芒果风味工厂继承这个抽象工厂类。//冰淇淋抽象类 public abstract class Cream { public abstract void getCream(); }
//草莓风味冰淇淋 public class StrawberryCream extends Cream { public void getCream() { System.out.println("This is strawberry ice cream."); } }
//芒果风味冰淇淋 public class MangoCream extends Cream { public void getCream() { System.out.println("This is mango ice cream."); } }
//抽象工厂类 public abstract class AbstractFactory { public abstract Cake createCake(); public abstract Cream createCream(); }
//草莓风味工厂类 public class StrawberryFactory extends AbstractFactory { public Cake createCake() { return new StrawberryCake(); } public Cream createCream() { return new StrawberryCream(); } }
//芒果风味工厂类 public class MangoFactory extends AbstractFactory { public Cake createCake() { return new MangoCake(); } public Cream createCream() { return new MangoCream(); } }
public class DemoTest { public static void main(String[] args) { //创建草莓风味蛋糕 AbstractFactory SBFactory = new StrawberryFactory(); Cake strawberryCake = SBFactory.createCake(); strawberryCake.getCake(); //创建芒果风味冰淇淋 AbstractFactory MGFactory = new MangoFactory(); Cream mangoCream = MGFactory.createCream(); mangoCream.getCream(); } }
相关文章推荐
- JAVA设计模式之工厂模式
- 设计模式-旧话重提之类工厂的使用
- 设计模式——三大工厂模式
- Java设计模式(三—四)----工厂模式
- 设计模式--简单工厂模式
- Java 设计模式之工厂
- Head First 设计模式学习笔记(4)---工厂模式
- 设计模式之工厂方法模式
- 设计模式之工厂模式
- 设计模式之桥接与工厂模式的简单书写
- 设计模式之四:工厂模式(简单工厂、工厂方法、抽象工厂)
- java设计模式,工厂模式
- 简单工厂设计模式(先拷贝来在理解)
- 设计模式之简单工厂模式
- 设计模式之五工厂方法模式
- 设计模式(一):简单工厂模式
- 工厂设计模式
- 自己对设计模式的理解:工厂模式和单例模式
- .net 设计模式之工厂模式
- 设计模式之【工厂模式】