设计模式学习-简单工厂模式

来源:互联网 发布:ep软件 编辑:程序博客网 时间:2024/06/05 19:28

简单工厂模式

转载>http://blog.csdn.net/lfdfhl/article/details/77977256

核心思想:由同一个工厂根据不同的产品类型生产不同的产品

简单工厂模式4种角色

  • 抽象产品:接口或抽象类,负责产品角色的定义,与客户端交互
  • 具体产品:被工厂类创建的对象,也即实际操作对象
  • 工厂类:生产产品
  • 客户端:工厂类的调用者

看个例子

抽象产品

public interface Mobile {    void call(String no);}

Mobile接口,定义了一个拨打电话的抽象方法call(String):void,客户端将调用这个方法;

具体产品

public class StMobile implements Mobile {    public StMobile() {        System.out.println("标配mobile");    }    void call(String no) {        System.out.println("标配mobile拨打号码:" + no);    }}public class ProMobile implements Mobile {    public ProMobile() {        System.out.println("高配mobile");    }    void call(String no) {        System.out.println("高配mobile拨号:" + no);    }}

定义了2个具体的Mobile产品,工厂类将根据不同的类型产生不同的Mobile对象

工厂类

public class MobileFactory {    public static Mobile createMobile(MobileType type) {        Mobile mobile = bull;        switch(type) {        case STANDARD:mobile = new StMobile();break;        case PROFESSIONAL:mobile = new ProMobile();break;        default: break;        }        return mobile;    }    public enum MobileType {        STANDARD, PROFESSIONAL    }}

客户端

public class TestMobile {    public static void main(String[] args) {        Mobile stMobile =         MobileFactory.createMobile(MobileType.STANDARD);        Mobile proMobile =             MobileFactory.createMobile(MobileType.PROFESSIONAL);        stMobile.call("15098764321");    }}

分析

上面的例子即是一个完整简单工厂模式示例。
通过观察可以发现,简单工厂模式的瓶颈在于工厂类产生具体产品的类型受限,每当有新类型产品加入时就要修改MobileFactory类代码,问题关键在于switch语句type类型不可知,此模式改进就是去掉switch,那就是另一种模式了

原创粉丝点击