简单的工厂模式

    添加时间:2013-8-10 点击量:

    从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂办法(Static Factory Method)模式,但不属于23GOF设计模式之一。简单工厂模式是由一个工厂对象决意创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以懂得为是不合工厂模式的一个特别实现。


    实现体式格式(附图)


    简单工厂模式的UML类图


     


    简单工厂模式的本质是由一个工厂类按照传入的参数,动态决意应当创建哪一个产品类(这些产品类持续自一个父类或接口)的实例。


    该模式中包含的角色及其职责


    工厂(Factory)角色


    简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。


    抽象产品(Car)角色


    简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。


    具体产品(BMW)角色


    是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。


    长处


    工厂类是全部模式的关键.包含了须要的逻辑断定按照外界给定的信息决意毕竟应当创建哪个具体类的对象.经由过程应用工厂类外界可以从直接创建具体产品对象的难堪场合排场摆脱出来仅仅须要负责“花费”对象就可以了。而不必管这些对象毕竟如何创建及如何组织的.明白了各自的职责和权力,有利于全部软件体系布局的优化。


    毛病


    因为工厂类集中了所有实例的创建逻辑,违背了高内聚义务分派原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先推敲到的,若是须要添加新的类,则就须要改变工厂类了。


    当体系中的具体产品类络续增多时辰,可能会呈现请求工厂类按照不合前提创建不合实例的需求.这种对前提的断定和对具体产品类型的判决绝错在一路,很难避免模块功能的伸展,对体系的保护和扩大很是晦气;


    这些毛病在工厂办法模式中获得了必然的降服。


    应用重视向


    工厂类负责创建的对象斗劲少;


    客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关怀;


    因为简单工厂很轻易违背高内聚义务分派原则,是以一般只在很简单的景象下应用。


     代码如下:



     1 package xiao.li;
    
    2
    3 public class 简单工厂
    4 {
    5 public static void main(String[] agrs)
    6 {
    7 CarFactory cf = new CarFactory();//工厂
    8 Car c=null;
    9 // c = cf.getCar(飞机); 既然是汽车工厂,怎么可能能帮您临盆飞机
    10 c=cf.getCar(BMW);
    11 if(c!=null
    12 {
    13 c=new BMW();//实体对象
    14 System.out.println(您好,你的宝马我们已经帮您临盆好了,请你有空前来提货并付款!);
    15 }else
    16 {
    17 System.out.println(不好意思,恕我力所不及!);
    18 }
    19
    20 }
    21 }
    22 /
    23 汽车工厂类
    24 /
    25 class CarFactory
    26 {
    27 /
    28 临盆汽车办法
    29 /
    30 public static Car getCar(String type)
    31 {
    32 Car c =null;
    33 if(BMW.equals(type)) //断定顾客是须要那样的汽车
    34 {
    35 c=new BMW(); //临盆宝马汽车
    36 }else if(Benz.equals(type))
    37 {
    38 c=new Benz(); //临盆奔驰
    39 }
    40 return c;
    41 }
    42 }
    43 /
    44 汽车的接口类
    45 /
    46 abstract class Car
    47 {
    48 /
    49 开车
    50 /
    51 public abstract void run();
    52 /
    53 泊车
    54 /
    55 public abstract void stop();
    56 }
    57 /
    58 奔驰
    59 /
    60 class Benz extends Car
    61 {
    62
    63 public void run() {
    64 // TODO Auto-generated method stub
    65 System.out.println(奔驰行驶中);
    66 }
    67
    68 public void stop() {
    69 // TODO Auto-generated method stub
    70 System.out.println(奔驰泊车了);
    71 }
    72 }
    73 /
    74 宝马
    75 /
    76 class BMW extends Car
    77 {
    78
    79 @Override
    80 public void run() {
    81 // TODO Auto-generated method stub
    82 System.out.println(宝马行驶中);
    83 }
    84
    85 @Override
    86 public void stop() {
    87 // TODO Auto-generated method stub
    88 System.out.println(宝马泊车了);
    89 }
    90 }



    容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永
    分享到: