设计模式之工厂模式
来源:互联网 发布:江苏远洋数据 编辑:程序博客网 时间:2024/06/05 14:41
首先需要区分简单工厂模式、工厂模式、抽象工厂模式
简单工厂模式、工厂模式、抽象工厂模式都属于创建型模式,主要功能是帮助我们将对象的实例化部分抽取出来,优化系统架构,增强系统可扩展性。
(1)简单工厂模式可以实现产品类实例代码与客户端代码分离,但是不符合开闭原则(对修改关闭,对扩展开放)。
public interface Product {}public class ProductA implements Product {public ProductA() {System.out.println("ProdutA");}}public class ProductB implements Product {public ProductB() {System.out.println("ProductB");}}public class SimpleFactory {public Product create(String name){switch (name) {case "ProductA":return new ProductA();case "ProductB":return new ProductB();default:return null;}}} public class SimpleFactoryTest {public static void main(String[] args) {new SimpleFactory().create("ProductA");new SimpleFactory().create("ProductB");}}
(2)工厂模式中,对应的工厂类可以生产对应的产品类,满足了开闭原则,无论增加多少产品类,只需要增加相应的工厂类就可以了,而不用修改原来的工厂类。
缺点是,如果产品很多,那么就要生成很多的工厂类。
public interface Product {}public class ProductA implements Product {public ProductA() {System.out.println("ProdutA");}}public class ProductB implements Product {public ProductB() {System.out.println("ProductB");}}public interface Factory {public Product createFactoryProduct() throws Exception;}public class FactoryB implements Factory {@Overridepublic Product createFactoryProduct() throws Exception {// TODO Auto-generated method stubreturn new ProductB();}}public class FactoryA implements Factory {@Overridepublic Product createFactoryProduct() throws Exception {// TODO Auto-generated method stubreturn new ProductA();}}public class MainTest {public static void main(String[] args) throws Exception {Factory factory;factory = new FactoryA();factory.createFactoryProduct();factory = new FactoryB();factory.createFactoryProduct();}}
(3)抽象工厂是应对产品族概念的。比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。
应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品。public interface ProductA {public void operationA();}public class ProductA1 implements ProductA {public ProductA1() {}@Overridepublic void operationA() {System.out.println("ProductA1");}}public class ProductA2 implements ProductA {public ProductA2() {}@Overridepublic void operationA() {System.out.println("ProductA2");}}public interface ProductB {public void operationB();}public class ProductB1 implements ProductB {public ProductB1() {}@Overridepublic void operationB() {System.out.println("ProductB1");}}public class ProductB2 implements ProductB {public ProductB2() {}@Overridepublic void operationB() {System.out.println("ProductB2");}}public interface AbstractFactory {public ProductA getProductA(String name);public ProductB getProductB(String name);}public class AbstractFactoryA implements AbstractFactory {@Overridepublic ProductA getProductA(String name) {switch (name) {case "ProductA1":return new ProductA1();case "ProductA2":return new ProductA2();default:return null;}}@Overridepublic ProductB getProductB(String name) {// TODO Auto-generated method stubreturn null;}}public class AbstractFactoryB implements AbstractFactory {@Overridepublic ProductA getProductA(String name) {return null;}@Overridepublic ProductB getProductB(String name) {switch (name) {case "ProductB1":return new ProductB1();case "ProductB2":return new ProductB2();default:return null;}}}public class FacoryProducer {public AbstractFactory getAbstractFactory(String name){if("AbstractFactoryA".equals(name)){return new AbstractFactoryA();}else if("AbstractFactoryB".equals(name)){return new AbstractFactoryB();}else {return null;}}}
阅读全文
0 0
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之---工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之-工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之 ------工厂模式
- 设计模式之工厂模式
- 老司机谈鉴黄_新一代“鉴黄师”是如何养成的?
- 简单的Django教程
- Google Guava简介
- lnk2019无法解析的外部命令
- tostring/tonumber的使用
- 设计模式之工厂模式
- 应用jquery操作元素样式(一)
- Codeforces 835B
- ADB命令
- +、-、*、/、%的使用
- 前缀和--分布函数--cf835c star sky
- Oracle之多表查询
- HDU 6045 Is Derek lying?【】
- Hive基础到高级