码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式-简单工厂

时间:2018-08-05 18:36:54      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:crete   关心   out   code   bsp   基类   str   ima   技术分享   

  1. 什么是工厂:万物皆对象,万物皆产品;工厂生成(new)产品;工程生成基类产品;
  2. 用户不关心产品生产过程,产品详细的生产过程放在工厂方法里
  3. 为什么使用工厂方法:在用户类代码中,使用new关键字实例化产品类时,就会导致用户类与产品类强耦合。
  4. 使用建议
    1. 工厂方法静态化: 简单工厂类中创建实例的方法,应为静态方法。
    2. 实例创建配置文件化:实例创建应尽量通过配置文件及反射机制,动态创建,达到能根据某个值,自动判断并创建对应类的实例的目的,这样就可以将庞大的swith语句块消除,同时,实例化部分的修改,只需要修改配置文件即可。
  5. 简单工厂模块化:一个简单工厂可以定义多个创建实例的静态方法,建议按照不同的功能模块,创建不同的工厂类。因为简单工厂类是一个模块封装提的一部分。
  6. 优点
    1. 能够非常简单快捷的实现模块的组件化,组件通过对外公开接口,实现面向接口编程
    2. 实现了外部调用和具体实现的解耦,增强了系统的健壮性和易维护性。
  7. 缺点
    1. 违背开放封闭原则(对新增是开的对修改是封闭的)  
  8. 类图

 

技术分享图片

public interface Product {
    public void viewColor();
    public void viewName();
}

 

public class ConcreteProduct_A implements Product {

    @Override
    public void viewColor() {
        System.out.println("view ConcreateProduct_A color");

    }

    @Override
    public void viewName() {
        System.out.println("view ConcreateProduct_A name");

    }

}
public class ConcreteProduct_B implements Product {

    @Override
    public void viewColor() {
        System.out.println("view ConcreateProduct_B color");

    }

    @Override
    public void viewName() {
        System.out.println("view ConcreateProduct_B name");

    }
}
public class ProductFactory {
    public static Product CreateInstance(String type){
        Product result=null;
        switch (type)
        {
            case "A":
                result  =new ConcreteProduct_A();
                break;
            case "B":
                result = new ConcreteProduct_B();
                break;
            
        }
        return result;
    }
}

 

设计模式-简单工厂

标签:crete   关心   out   code   bsp   基类   str   ima   技术分享   

原文地址:https://www.cnblogs.com/jiangtao1218/p/9426620.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!